我正在编写Chrome内容脚本,当我在DOM中注入它时:
"<a href='#' onclick='alert(\"Hi!\");return false;'>Hi</a>"
它工作正常(当我点击它时会弹出警报),但是如果我为警报创建一个函数,它会说函数未定义。例如:
"<a href='#' onclick='alertPlease(\"Hi!\");return false;'>Hi</a>"
function alertPlease(x){
alert(x);
}
我的所有代码都是相同的内容脚本js文件。
在后台加载另一个js文件后,是否必须放置可以使用的代码?我尝试添加一个带有'alertPlease();的后台页面功能,但这也不起作用。
任何提示都将不胜感激! 谢谢!
答案 0 :(得分:10)
内容脚本以“isolated world”运行。网页和内容脚本无法看到彼此的JavaScript变量(尽管它们可以看到相同的DOM)。在DOM中添加onclick
属性时,处理程序是在网页的世界中创建的,而不是扩展的世界,因此代码可以不能访问您定义的其他功能。您应该在纯Javascript中定义事件侦听器,然后使用onclick
附加它,而不是使用addEventListener
处理程序。
孤立世界是提高安全性和稳定性的一项功能。如果您在Greasemonkey sandbox in Firefox内进行开发,情况就会相似。
答案 1 :(得分:-1)
在“content_scripts”
下的manifest.json文件中指定任何脚本{
"name": "My Extension",
"content_scripts": [{
"matches": ["<all_urls>"],
"css": ["style.css"],
"js": ["jquery-1.5.js", "script.js"]
}]
}