0

これは、insertText() 関数が呼び出されるところから background.js のエントリです。

 $(document).ready(function() {
      // Handler for .ready() called.

    InsertText();
    });

この関数呼び出しは、Web サイトの最初の読み込み時にのみ発生します。現在スクロールしている Web ページの後続のロード/変更では、これは呼び出されません。どこが間違っていますか?このためのタブ変更リスナーを作成する必要がありますか?

4

3 に答える 3

1

間違ったイベントにバインドしています。readyページがスクロールされたときに何かをしたい場合は、DOMがロードされたときにトリガーされ、次のようにバインドしscrollます。

$(window).scroll(function(){
    // code here    
});
于 2012-12-18T00:42:31.013 に答える
0

この動作は正しいです。$(document).readyDOMの準備ができたときに呼び出され、関数内のコードを実行します:http: //api.jquery.com/ready/

これは、ページの準備が整い、DOMが構築されたときに(ほとんどの場合、ほとんどのブラウザーで)、ページごとに1回だけ発生します。

ロードなど、特定のイベントに対してアクションを実行できます。したがって、ロードされることになっているコンテンツがわかっていて、それに何かを起動したい場合は、これを試すことができます(http://api.jquery.com/load/):

$("#imageID").load(function() {
    // image has loaded
});

特にスクロールを対象としている場合は、jQueryスクロールメソッドを使用できます:http://api.jquery.com/scroll/

ただし、スクロールが呼び出される頻度に注意してください。ユーザーがスクロールを停止してからxミリ秒後にイベントが発生するのを遅らせたい場合があります:)。

于 2012-12-18T00:45:12.157 に答える
0

バックグラウンド ページの実行環境とコンテンツ スクリプトの実行環境は 2 つの異なるバリアントであるため、何らかの通信メカニズムを使用する必要があります。

ユース ケースを実現するためのサンプル スクリプト

マニフェスト.json

クロム拡張要素のすべての部分をマニフェスト ファイルに登録しました

{
"name":"Content to Background Script",
"description":"This Extension invokes background Script function whenever there is a scroll event",
"version":"1",
"manifest_version":2,
"background":{
    "scripts":["background.js"]
},
"content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["myscript.js"]
    }
  ],
"permissions":["<all_urls>"] 
}

background.js

登録されたイベント リスナーと関数はこちら

//Some trivial Function
function _someFunction() {
    console.log("I am invoked ...");
}

//Handler when message is sent from Content Scripts
chrome.extension.onMessage.addListener(function (message, caller, handler) {
    if (message["callTo"] == "_someFunction") _someFunction();
});

myscript.js

これは簡単なサンプル コンテンツ スクリプトです。

//Look for scroll event
document.addEventListener("scroll", function () {
    console.log("Page is Scrolled hence requesting background page to execute my function");
    //Request Background page for execution of a function
    chrome.extension.sendMessage({
        "callTo": "_someFunction"
    });
});

さらに情報が必要な場合はお知らせください。

于 2012-12-18T07:11:24.463 に答える