【问题标题】:Chrome extension: Javascript not loadingChrome 扩展程序:Javascript 未加载
【发布时间】:2013-11-11 10:57:48
【问题描述】:

根据 stackoverflow 上的另一个问题,我有以下用于 chrome 扩展的代码 contentscript.py:

manifest.js

{
"name": "test script",
"version": "0.1",
"content_scripts": [{
    "js": ["contentscript.js"],
    "matches": ["http://*/*"]
}],
"manifest_version": 2,
"web_accessible_resources": ["script.js"]
}

contentscript.js

var s = document.createElement('script');
s.src = chrome.extension.getURL('script.js');
(document.head||document.documentElement).appendChild(s);
s.onload = function() {
    s.parentNode.removeChild(s);
};

script.js

document.body.innerHTML = document.body.innerHTML.replace(new RegExp("this", "gi"), "that");

为了简单地替换一些文本。如果我将与 script.js 上的相同表达式放在测试 html 文件上,它可以工作,但它在扩展名中看起来并没有实际注入代码。我终其一生都无法弄清楚为什么。 manifest 和 contentscript 似乎是有序的,所以我不知道在这里做什么。

【问题讨论】:

  • 你为什么不从contentscript.js 中做你的 stuuf 而不是注入另一个脚本?内容脚本确实可以访问 DOM。
  • 顺便说一句,你的代码对我来说也很好用。您的scripts.js 在哪里?你确定是注入的?再说一遍:为什么还要使用另一个脚本(您必须将其声明为“网络可访问资源”,而不是在内容脚本中做同样的事情?
  • 显然,内容脚本是在隔离环境中执行的,如下所示:stackoverflow.com/questions/9515704/…

标签: javascript google-chrome google-chrome-extension


【解决方案1】:

尝试将“https://*/*”添加到 manifest.json 中的匹配项。 我建议您将第一行放在您的 contentscript.js 中:

console.log('Content script loaded and started');

因此您可以检查页面(F12,控制台选项卡)并查看内容脚本是否被注入。这对您的调试有很大帮助。

我不知道您的 script.js 中发生了什么,但值得考虑的是,onload 事件中的 removechild 可能会在您的任务完成之前发生。

【讨论】:

  • 考虑你在 onload 事件中的 removechild 可能在你的任务完成之前发生”:是什么让你这么认为?
  • 我已将此调试放在两个 .js 文件的开头,并且没有任何内容打印到控制台。我不知道为什么这不起作用。也许我的 chrome 安装有问题?
  • 如果控制台中没有关于内容脚本的错误消息,请检查 manifest.json 中的 content_scripts.matches 是否实际匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 2013-12-28
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多