我写了一个简短的内容脚本,它阻止特定网站为链接点击创建新窗口。
这是我的第一个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);
谢谢你,斯科特和所有评论过的人!
答案 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 ...