2017-03-14 12 views
0

私はここで同様のトピックでいくつかの回答を見てきましたが、この動作の原因を見つけることができませんでした。ここでFacebookのJavascript SDKとSafari - 原因不明の動作

は私のスクリプトです:

$("html").on("click",".fb",function(){ 
    var my_picture=$("#image_link_holder").attr('data-link'); 
    var file_id=$("#image_link_holder").attr('fileid'); 


    FB.getLoginStatus(function(response) { 


    FB.login(function(apiResponse){ 
    my_share="http://www.example.com/gallery.php-Q-event_id=<?php echo $event_id;?>"; 
    my_share=encodeURI(my_share+"-A-fb_cover-E-"+my_picture); 

    FB.ui(
    { 
    method:'feed', 
    link: my_share, 
    display: 'touch', 
    message: 'message', 
    caption:'caption', 
    name:"Name" 

    }) 
}, {scope: ['publish_actions','email']}); 

これはクローム、FireFoxの、エッジ、アンドロイド、Internet Explorerで完璧に動作しますが、Safariで、それだけで、ウィンドウが点滅し、他に何も起こりません。

コンソールエラーや何かについてはSafariで見ていますが、それは絶対に空です。私がボタンを押すと、Facebookからの3つの画像のネットワーク要求が表示されますが、それはそれです。それ以外のすべてのブラウザでは https://www.facebook.com/impression.php/へのリクエストも表示されません。

誰かが私が行方不明になっていることにいくつかの光を当てることができますか?それは私を精神的に運転しています。もちろん、常に「完璧な」製品で愛されたAppleでなければなりません。

経験は、MacとiOSデバイスの両方で再現されています。 ! Safariのバージョン:10.0.3 のiOS:シミュレータは10.1

これは私がページ上のSDKをロードする方法である:T $ @の

window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : 'XXXXXXXXXXXX', 
     xfbml  : false, 
     version : 'v2.5' 
    }); 


    FB.getLoginStatus(function (response) {}); 
    }; 

    (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"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

答えて

-1

何杭 - 問題が発生したことにより、 Safariにはデフォルトでポップアップブロッカーがあるという事実!!!!!!クリックした直後にも自分のイベントが発生しても、ポップアップブロッカーによってブロックされていました。

私はその会社を嫌っていますが、あなたはどのようにユーザーフレンドリーなウェブサイトを作ろうとしているのでしょうか?それはうまくいかないでしょう。誰かが「あなたは私たちがもっと知っています! "

今、私は、ユーザーが設定を行って、ポップアップブロッカーが無効になっていることを確認する必要があることを警告しました。それ以外の場合は、期待どおりにページを使用できません。

だから失望します!!!!!!

+0

これは、ポップアップを作成して作成するときに起こりますが、クリックなどのユーザーのやりとりには直接関係しません。また、非同期呼び出しのコールバックにネストすることで、それはもはや直接的なものではありません。これはSafariに限らず、他のブラウザでも同様に起こります。 FB.loginの場合、FBドキュメントはその事実を明示的に警告します。 _ "ユーザーに警告するようになりました。" - いいえ、FB.loginコールバックから単純に取り出して、代わりに直接呼び出す必要があります。 (ダイアログはパーミッションを必要とせず、ユーザーがあなたのアプリケーションに全くログインしません) – CBroe

+0

Ish ... FB.getLoginStatusはキャッシュされている必要があります。ページがロードされたときに呼び出すのでサーバーへの別のラウンドトリップを行う必要はありません。 _ "FB.getLoginStatusを呼び出すと、このキャッシュされた応答からデータが返されます。" _ユーザーがログインしていない場合、ログインウィンドウが開きます。私はコードの残りの部分を含めていないので、私はいくつかのデータ(電子メールアドレス+ post_id)を取得し、ユーザーをログインさせる必要があることを把握しているので、ログインセクションにあります。 1つはポップアップブロッカーによってブロックされます。 –

+0

はい - これを非同期呼び出しにネストしたためです。 getLoginStatusが要求を出すかキャッシュされた結果を使用するかは関係ありません。次のコードがコールバック関数内でのみ呼び出され、イベントから「切り離される」という事実は変わりません。 – CBroe

関連する問題