我有一个chrome扩展名content_scripts
。当页面加载时,我会将新元素附加到DOM
使用jquery:
urlTarget.parent().prepend("<div class='scout status' onClick='test()' data-domain='" + domainKey + "'></div>");
这很好。我还在inject.js
内容脚本中定义了一个函数:
function test() {
alert("this is test");
return false;
}
单击附加元素后,出现以下错误:
Uncaught ReferenceError: test is not defined
我一直在阅读有关chrome扩展框架中的安全限制的信息(请参阅docs),但是我不确定它们是否也适用于内容脚本(文档显示了弹出示例),还是我错过了elese的内容?
当您将新元素附加到DOM并通过通过注册事件监听onClick=XXX
器时,实际上浏览器期望这XXX
是来自页面脚本。但是,您知道内容脚本是孤立的,它们不能直接访问页面创建的变量/函数,反之亦然。
因此,这里有两种解决方法:
id
为插入的元素添加,然后通过以下方式在内容脚本中绑定事件侦听器
// Assuming the id is ID
document.getElementById('ID').addEventListener('click', test);
script
在页面中添加标签(使用内容脚本在页面上下文中插入代码)
var actualCode = `
function test() {
alert("this is test");
return false;
}
`;
var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.remove();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句