0

私はChrome拡張機能を持っていますが、これはようやく更新に取り掛かっています[6か月以上]。
マニフェストのバージョンを1から2にアップグレードするプロセスを実行しました。

私の拡張機能はFacebookに「すべてを突く」ボタンを追加するので、すべての人を個別に突く必要はありません。

問題は、彼らがホームページのフレームではなく、facebook.com/pokesにポークを移動したことです。

したがって、私の回避策は、/ pokesにアクセスしたらページをリロードするようにユーザーに指示することでした。そうすれば、スクリプトがリロードされ、[PokeAll]ボタンが挿入されます。ここで、これを修正して、ユーザーがfacebook.comにアクセスし、[ポーク]をクリックして、ポークが読み込まれると、ボタンが自動的に表示されるようにします。setTimeoutを1.5秒間設定しましたが、接続が遅い場合は1.5秒では不十分であり、スクリプトがボタンの挿入を早すぎるため、ボタンが表示されません。

つまり、基本的に、「ポーク」リンクにイベントリスナーを追加します。show_pokes()これが、インジェクションコードを実行する実行用のタイムアウトを追加したものです。

$(document).ready() 私の考えは内部 に入れるshow_pokes()ことでしたが、それが関数で継続されなかったため、それは機能しませんでした。私$(document).ready()は最初のページの読み込みのためだけだと思いますか?だから私は試しました

document.addEventListener('DOMContentLoaded', function (){ /*huge chunk of code here*/ })

しかし、それもハングし、機能を終了することはありませんでした。

したがって、FacebookのタブをクリックするとFacebookがAJAXリクエストを使用することは間違いありません[こちらをご覧ください]。AJAXが終了するまで待機するイベントを設定できれば、それを関数に続行して、ボタン?助けていただければ幸いです。さらにコードや詳細が必要な場合は、お知らせください。または、Facebookにアクセスして、それらのタブがどのように読み込まれるかを確認できる場合は、[AJAXを使用しているかどうかを確認または拒否する]ことも非常に役立ちます。

4

2 に答える 2

0

Jeremy が述べたように、カウンターをインクリメントします。この AJAX リターンのループ中に、先に進むことに注意してくださいi。現在を保持する必要がある場合はi、AJAX 呼び出しをクロージャー内に配置する必要があります。

var pokes = $(".pokeMe");
var poked = 0;
var failed = 0;

for(var i = 0; i < pokes.length; i++) {
    $.ajax({
        url : url, 
        success : function(data) {
            poked++;

            if (poked + failed == pokes.length) {
                // all actions returned
            }
        },
        error : function(data) {
            failed++;

            // optional logic
        }
    });
}
于 2012-09-24T04:56:56.843 に答える
0

これがまったく役立つかどうかはわかりませんが、$.when().done()jQuery が提供する を使用できるようです。そうすれば、 内のすべての AJAX 呼び出しwhen()が完了するまで待機してから、 内で呼び出す残りの関数に進みますdone()

http://api.jquery.com/jQuery.when/

于 2012-09-24T16:48:32.147 に答える