滚动网页时,不会加载chrome扩展的Background.js。这是什么问题?

时间:2012-12-18 00:37:26

标签: javascript google-chrome-extension

这是从调用insertText()函数的background.js的条目。

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

    InsertText();
    });

此函数调用仅在网站的第一次加载时发生。我正在滚动的网页中的任何后续加载/更改,都不会被调用。我哪里错了?我是否要为此编写一个标签更改监听器?

3 个答案:

答案 0 :(得分:1)

你绑定了错误的事件。加载DOM时会触发ready,如果您想在滚动页面时执行某些操作,然后绑定到scroll

$(window).scroll(function(){
    // code here    
});

答案 1 :(得分:0)

这种行为是正确的。在DOM准备就绪时调用$(document).ready,并在函数中执行代码:http://api.jquery.com/ready/

当页面准备就绪并构建DOM时(大多数情况下,在大多数浏览器中),每页只会触发一次。

您可以针对特定事件(包括加载)触发操作。因此,如果您知道应该加载哪些内容并且想要在其上发布内容,则可以尝试此操作(http://api.jquery.com/load/):

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

如果您专门定位滚动,则可以使用jQuery滚动方法:http://api.jquery.com/scroll/

请注意滚动被调用的频率,并且您可能希望在用户进行STOPPED滚动后延迟事件触发x毫秒:)。

答案 2 :(得分:0)

Background Page执行和Content Script执行环境是两种不同的变体,因此必须使用某种communication mechanism

实现用例的示例脚本

的manifest.json

使用清单文件

注册了chrome扩展元素的所有部分
{
"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"
    });
});

如果您需要更多信息,请与我们联系。