Javascript未在Chrome扩展程序脚本中加载

时间:2013-09-07 17:28:21

标签: jquery google-chrome google-chrome-extension google-chrome-app

我正在尝试做什么

这是一个扩展程序,一旦页面加载,就会隐藏包含具有“示例”类的子项的div

会发生什么

无。在js页面上,我放置的任何内容都会被忽略。我尝试过使用控制台并创建页面提醒,但没有任何工作。

代码

manifest.json

{
"name": "Example",
"version": "1.0",
"default_locale": "en",
"permissions": [
    "http://example.com/*"
    ],
"content_scripts": [
    {
        "matches": [
            "http://example.com/*"
        ],
        "js": [
            "js/jquery/jquery.js",
            "src/inject/inject.js"
        ]
    }
]
}

src/inject/inject.js

chrome.extension.sendMessage({}, function(response) {
var readyStateCheckInterval = setInterval(function() {
    if (document.readyState === "complete") {
        clearInterval(readyStateCheckInterval);

                    //Nothing here actually happens
                    alert("Extension loaded");
                    console.log("Extension loaded");

                    //The script that I *want* to happen
                    $('.example-stamp').parent().parent.().parent().hide();
    }
}, 10);
});

备注

jquery.js文件是jQuery.com的最新下载。将解压缩的扩展程序加载到Chrome时没有错误,控制台中不显示任何内容 - 甚至是错误。

我一直在http://www.example.com进行测试。

2 个答案:

答案 0 :(得分:0)

  • chrome.extension.sendMessage用于将消息从内容脚本发送到后台页面或其他扩展页面。由于您只定义了一个内容脚本,因此将不会收到该消息,并且永远不会调用您的回调函数。
  • 通常,您无需等待文档完成状态来操作DOM。默认情况下,Chrome会在document_idle处运行您的内容脚本,有时在文档准备就绪和文档完成之后。请参阅Content Scripts
  • 定义中的run_at清单参数
  • 如果您确实需要在页面加载完成后运行代码,可以将run_at设置为document_start并监听窗口加载事件。当您使用jQuery时,您可以这样做:
$(window).on("load", function() {
    console.log("Extension loaded");
    $('.example-stamp').parent().parent.().parent().hide();
});

答案 1 :(得分:0)

如何修复

更改

"content_scripts": [
    {
        "matches": [
            "http://example.com/*"
        ],

"content_scripts": [
    {
        "matches": [
            "http://*.example.com/*"
        ],

<强>为什么

答案与js代码无关,而是清单。

出于某种原因,除非content-script jSON包含字段http://*.example.com/*,否则javascript根本不会注入,因为http://example.com本身不起作用,即使标题网址。