简单的Chrome内容脚本未运行

时间:2014-07-13 00:51:35

标签: google-chrome-extension content-script

我写了一个简短的内容脚本,它阻止特定网站为链接点击创建新窗口。

这是我的第一个Chrome扩展程序,我已经为这个网站和互联网打进了一个无法运行的原因,但我找不到任何内容。我可能在某个地方犯了一个基本的业余错误。

的manifest.json:

{
"manifest_version": 2,

"name": "DHS Links",
"description": "Stops the school's site from constantly opening new windows.",
"version": "1.0",

"browser_action": {
"default_icon": "icon.png"
},

"content_scripts":[
  {
    "matches": ["*://www.darienps.org/dhs/*"],
    "js": ["jquery.js", "makeNormalLinks.js"],
    "run_at": "document_end"

  }
 ]
}

我在网站的本地版本上测试了Javascript文件,所以我很确定它很好,但以防万一:

makeNormalLinks.js:

$(document).ready(function() {
    $("a").each(function(){
        $(this).removeAttr("onclick");
    });
});

jQuery的副本位于同一目录中,似乎没有任何问题。

以下是网站上许多链接的onclick代码:

onclick="window.open(this.href,'targetWindow','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,')

感谢您仔细阅读!


编辑:

我在Teepeemm的评论中尝试了Rob W's response to another question中的两种注射方法。

以下是方法1的新代码:

的manifest.json:

{
"manifest_version": 2,

"name": "DHS Links",
"description": "Stops the school's site from constantly opening new windows.",
"version": "1.0",

"browser_action": {
"default_icon": "icon.png"
},

"content_scripts":[
  {
    "matches": ["*://www.darienps.org/dhs/*"],
    "js": ["jquery.js", "scriptLauncher.js"]

  }
 ],
"web_accessible_resources": ["makeNormalLinks.js"]
}

scriptLauncher.js:

var s = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.extension.getURL('makeNormalLinks.js');
s.onload = function() {
this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);

方法2a:

(使用旧Manifest.js)

makeNormalLinks.js:

var actualCode = ['$(document).ready(function(){',
                  '$("a").each(function(){',
                  '$(this).removeAttr("onclick");',
                  '});',
                  '});'].join('\n');

var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

不幸的是,这两种方法似乎都不起作用。我非常感谢那些评论并认为我们已接近答案的人。


解决方案:

的manifest.json:

{
"manifest_version": 2,

"name": "DHS Links",
"description": "Stops the school's site from constantly opening new windows.",
"version": "1.0",

"browser_action": {
"default_icon": "icon.png"
},

"content_scripts":[
  {
    "matches": ["*://www.darienps.org/dhs/*"],
    "js": ["makeNormalLinks.js"]

  }
 ]
}

makeNormalLinks.js:

document.addEventListener("click", function(e) {
    e.stopPropagation();
}, true);

谢谢你,斯科特和所有评论过的人!

2 个答案:

答案 0 :(得分:1)

使用onclick属性有许多奇怪的副作用。更新的方法是为文档添加一个过滤器,用于过滤不需要的事件。像:

document.addEventListener("click", function(e) {
  e.stopPropagation();
}, true);

true参数很重要(请参阅事件捕获)。这将阻止所有单击事件侦听器触发,但仍会触发默认单击操作。

答案 1 :(得分:0)

我遇到了一个类似的问题,即在Google Mail中触发内容脚本。我偶然发现了一个推荐使用“hashchange”事件的页面。


SELECT NEW <package>.CurrentMeasure(obsp.Identifier, obs.phenomenontimestart, nv.value) FROM ...