Chrome拓展应用-通过content_scripts注入页面的js文件中onclick问题

通过manifest.json中的content_scripts注入到某页面的js文件,如下:

// create node for user interface

var new_node = document.createElement('div');
new_node.innerHTML = `
<button id="A" onclick="clickA()">a</button>
`;

// inject new node

var target_node = document.querySelector('...');
target_node.parentNode.insertBefore(new_node, target_node);

// functions

function clickA() {
    alert('1');
}

按照以上写法,点击按钮a不能触发弹窗,chrome控制台提示clickA不存在。参考https://www.cnblogs.com/champagne/p/4844682.html,原因是

Content Scripts的执行位于一个特殊的环境,我们称为isolated world。在这个环境中,Content Scripts能够访问当前Web页面的DOM,但是Content Scripts与当前Web页面自带的JavaScript变量和函数是不能直接互相访问的。

也就是说,包含button的html代码片段注入到网页中后,与我们js文件的环境相隔离,无法调用到clickA函数了。以下是一种解决方式:

// create node for user interface

var new_node = document.createElement('div');
new_node.innerHTML = `
<button id="A">a</button>
`;

// inject new node

var target_node = document.querySelector('...');
target_node.parentNode.insertBefore(new_node, target_node);

// bind events

document.getElementById("A).onclick = () => {
    alert('1');
};

关于这种方式,在https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html#injected-script4.6 injected-script中有更详细的介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值