我正在写一个chrome扩展,在我的background.html页面中,它正在使用此命令注入一个js文件:
chrome.tabs.executeScript(null, {file: "mod.js"});
此文件中的所有代码都在页面上正常运行,除了没有为onclick属性定义的一个函数。
我正在改变facebook主页的innerHTML,包含“头条新闻”和“最新”的div
我正在插入这个html:
"<a href='#' onclick='thisIsUndefined()'>
<span class='someClass'>
Better feed
</span>
</a>"
在注入的js文件中,thisIsUndefined完美地表示为:
function thisIsUndefined () {
alert("is it working yet?");
}
我甚至在我正在使用的文件中有另一个函数,但每当我点击插入的链接时,我得到一个错误,说它是未定义的。
确切错误: 未捕获的ReferenceError:未定义thisIsUndefined
以下是整个文件供参考:
http://texthmu.com/Devin/HMU%20ext/mod.js
你能否推荐可以修复定义的'global'或'var'这样的关键词?
答案 0 :(得分:3)
页面上的脚本和内容脚本是隔离的。它们与相同的DOM交互,但不直接与彼此的变量交互。当您添加onclick
时,它将在站点的脚本中查找该功能。最好的方法是使用document.createElement
,然后使用onclick
或addEventListener
附加您的功能。如果您想要转到innerHTML
路线,请先将其附加到DOM,然后找到并附加您的活动。
答案 1 :(得分:2)
由于Chrome的执行模式,你有点看不出那个:
内容脚本以特殊方式执行 环境称为孤立的世界。 他们可以访问DOM的DOM 他们被注入的页面,但没有 任何JavaScript变量或 页面创建的功能。它 看起来像每个内容脚本 没有其他JavaScript执行 在它正在运行的页面上。相同 反之亦然: JavaScript正在运行 在页面上无法调用任何功能 或访问由...定义的任何变量 内容脚本。
(以粗体强调)
来源:http://code.google.com/chrome/extensions/content_scripts.html#execution-environment
答案 2 :(得分:0)
这是我找到的最佳解决方案:
$("#elementID").click(function() {
myFunc();
});