Facebook игнорирует часть строки моего запроса в URL-адресе общего доступа

У меня есть страница с кнопкой «Поделиться в Facebook». URL-адрес, которым я хочу поделиться, содержит строку запроса, которую я создаю с помощью javascript. Вот как я создаю URL-адрес для обмена.

queryString = "cup=blue&bowl=red&spoon=green"; 
//the values of this are actually generated by user input, don't think its important for this example though. So in this example its just a basic string.

siteURL = "http://example.com/?share=1&";
//the url without the query string

sharingURL = siteURL+queryString; 
//Combing the domain/host with query string.. sharingURL should = http://example.com?share=1&cup=blue&bowl=red&spoon=green


function FBshare(){
  shareURL = siteURL+queryString;
  console.log(shareURL);
  window.open(
     'https://www.facebook.com/sharer/sharer.php?u='+shareURL, 
     'facebook-share-dialog', 
     'width=626,height=436'); 
  return false;
}


$(".facebook").bind("click", function(){
   FBshare();
});

Когда Facebook по какой-то причине захватывает URL-адрес, он оставляет все, что было создано в переменной queryString. Таким образом, общий URL-адрес оказывается просто http://example.com/?share=1. Любые идеи, почему он не использует переменную queryString? Правильный URL-адрес прекрасно помещается в console.log, а также в URL-адрес share.php Facebook в качестве строки запроса (например, https://www.facebook.com/sharer/sharer.php?u=http://example.com/?share=1&cup=blue&bowl=red&spoon=green).. но фактическая ссылка на Facebook неполная.

Вот jsFiddle. http://jsfiddle.net/dmcgrew/gawrv/


person Dustin    schedule 30.09.2013    source источник


Ответы (4)


URL-адрес facebook выглядит следующим образом:

https://www.facebook.com/sharer/sharer.php?u=http://example.com?share=1&cup=blue&bowl=red&spoon=green

Первый & и параметр cup (а также другие параметры) интерпретируются как часть URL-адреса facebook.

Используйте encodeURIComponent(), который будет кодировать специальные символы, такие как &:

shareURL = encodeURIComponent(siteURL+queryString);
person Jason P    schedule 30.09.2013

В дополнение к ответу Джейсона П., sharer.php давно устарел.

Вместо этого вам следует использовать диалоговые окна Feed and Share Facebook: https://developers.facebook.com/docs/reference/dialogs/feed/

Они обеспечивают больший контроль над диалоговым окном общего доступа, а также улучшенную отладку с помощью отладчика Facebook.

person ceejayoz    schedule 30.09.2013

По состоянию на октябрь 2014 года Facebook устарел как для sharer.php, так и для диалогов Feed and Share.

Текущая рекомендация для обмена ссылками — использовать диалоговое окно «Поделиться»:

https://developers.facebook.com/docs/sharing/reference/share-dialog#redirect

person Glen    schedule 31.10.2014

Я столкнулся с этой проблемой в этом конкретном сценарии:

Я бы поделился следующей ссылкой:

FB.ui({
  method: 'share',
  href: 'mysite.com?p=10&og=15',
}, function(response){});

Парсер Facebook удалит параметр og из URL-адреса и очистит следующий URL-адрес: mysite.com?p=10

Причина

  1. Я прошу парсер Facebook очистить эту ссылку: mysite.com?p=10&og=15. Парсер сделает запрос на указанный URL-адрес и получит ответ, который выглядит следующим образом:
<head>
    <meta property="og:url" content="mysite.com?p=10">
    <meta property="og:image" content="mysite.com?photo=1145">
    // more meta tags...
</head>
  1. Парсер Facebook захватывает любое значение, которое я указываю в метатеге og:url, и делает запрос к этому URL-адресу и очищает эту страницу.

Решение

Мне пришлось исправить значение метатега og:url, чтобы включить все необходимые параметры.

person Hooman Bahreini    schedule 26.10.2020