У меня есть две проблемы, которые пытаются интегрировать кнопки Facebook Share в моем приложении SPA. Приложение отображает два списка статей, те, которые были отправлены другим людям и отправленные мной. Каждый из этих двух списков представлен отдельно, нажимая одну из двух кнопок в верхней части страницы. Я использую ng-show
для достижения этого (что означает, что эти две переменные $scope
, которые установлены на true или false этими кнопками, так что если для параметра $ scope.Others_Posts установлено значение true, отображаются сообщения из других; наоборот, для моих собственных должностей).
Первая проблема заключается в том, что в первый раз, когда я нажимаю на кнопку общего доступа к Facebook, скажем, просмотр сообщений других пользователей, я получаю окно входа в Facebook по мере необходимости. Пока я остаюсь в одном и том же представлении (сообщения других в этом примере), всплытие входа в Facebook работает нормально. Если я переключусь на другое представление (мои сообщения), кнопка share больше не появится. Ничто, что я делаю, не помогает (например, вернуться к первому виду). Если, с другой стороны, я переключаюсь на второе представление перед вызовом общего ресурса, он также работает до тех пор, пока я не переключаю представление. Подводя итог, если я нажимаю на кнопку совместного доступа в одном из двух представлений, как только я переключаю вид (из других сообщений на мой или наоборот), кнопка share перестает появляться.
Это то, что я использую:
<button type="button" class="btn btn-default"
aria-haspopup="true"
aria-expanded="false"
style="width:100%;height:40px;text-align:left">
<div id="fb-root" style="width:100%;height:0px;margin:-10px 0 0 0 "></div>
<script>
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk')
);
</script>
<style>
.fb-share-button
{
transform: scale(1.5);
-ms-transform: scale(1.5);
-webkit-transform: scale(1.5);
-o-transform: scale(1.5);
-moz-transform: scale(1.5);
transform-origin: top left;
-ms-transform-origin: top left;
-webkit-transform-origin: top left;
-moz-transform-origin: top left;
-webkit-transform-origin: top left;
}
</style>
<div class="fb-share-button" data-href="{{Get_Path_for_Facebook(One_Article)}}" data-layout="button"></div>
</button>
Обратите внимание, что я обматываю стандартный код из Facebook на кнопку, потому что у меня есть другие действия, предлагаемые пользователю.
Моя вторая проблема более ориентирована на AlgularJS. URL, который мне нужно предоставить, включает параметры, которые рассчитываются/создаются удаленно. Поскольку в списке могут быть десятки или сотни записей, я хочу вызвать удаленную службу только тогда, когда это необходимо (т.е. когда пользователь хочет поделиться определенной записью). Предполагается, что это делается функцией Get_Path_for_Facebook(One_Article)
которая должна вызываться, когда пользователь нажимает кнопку совместного доступа определенной записи. Проблема заключается в асинхронном поведении обещания, созданного при вызове службы (т.е. функция Get_Path_for_Facebook
выдает запрос HTTP с обещанием, которое возвращает необходимые параметры, но это происходит слишком поздно).
Любые предложения по этим двум проблемам будут высоко оценены.
Вы можете использовать Facebook sharer.php
. Основная концепция:
HTML
<button ng-click="share(selected)">Share</button>
JS
$scope.share = function share(selected) {
window.open('https://www.facebook.com/sharer/sharer.php?u=https://your.url/&t=' + selected.id, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600');
// anything else you want to do when clicking the share button
}
Вы также можете удалить FB SDK, если вы не используете его ни для чего другого.