Chrome扩展:连接"内容脚本"注入DOM
Chrome Extensions: connect "Content Script" with injected DOM
我意识到我们可以从内容脚本共享DOM(根据手册)。
我们可以通过
将注入的DOM内容与我们的内容脚本连接起来element.addEventListener('click',function(){ ourController.fnCallback(); });
// or
element.onclick = ourController.fnCallback;
但是当注入DOM时实现了这样的东西:
<a href="javascript:ourController.fnCallback();">Click Me!</a>
抛出的错误是cannot call fnCallback() on undefined ourController
(不是完全重写的错误消息)
是否有一种方式,我们可以与我们的javascript对象从注入dom像我在第二个例子中尝试通信?
对象在content_script.js
中定义如下:
var ourController = {
fnCallback: function(){
// code here
}
};
,这些代码直接放在脚本中,按照manifest加载,如下所示:
"content_scripts": [ {
"js": [ "content_script.js" ],
"matches": [ "http://*/*", "https://*/*", "ftp://*/*" ],
"run_at": "document_start"
}],
这个问题的解决方案来自文档:
执行环境
内容脚本在称为孤立世界的特殊环境中执行。它们可以访问被注入的页面的DOM,但不能访问该页创建的任何JavaScript变量或函数。它将每个内容脚本视为在其运行的页面上没有其他JavaScript正在执行。反过来也是如此:在页面上运行的JavaScript不能调用任何函数或访问由内容脚本定义的任何变量。
所以任何注入的内容都不能与内容脚本一起工作。唯一的解决方案是在内容脚本
中使用像这样的代码document.getElementById("elmID").addEventListener('click',function(){
var data = //get the data from DOM or window state, not from content script
chrome.extension.sendRequest({
'request_data': data
});
})
它将添加click-event函数,该函数可以与content_script
相关文章:
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- 内联javascript与"<脚本>"字符串错误地关闭了脚本标记
- "未捕获类型错误/丢弃意外“;因为一句台词而出现?(HTML w/<脚本>)
- 在<script src=“"></脚本>标签
- 显示“<script src='some.js'></脚本>"在Html文档中
- "npm运行构建:css"不能工作,而当我自己运行脚本时是可以的
- 多个“;脚本调用"在SINGLE”内$(文档).ready()”;
- jQuery脚本,它搜索现有的查询参数并且不添加“"如果存在
- "未终止的模板文字“;当文字包含脚本标记时出现语法错误
- "停止运行脚本错误“;在IE8中拥有大量收藏
- 避免使用神秘的javascript"脚本错误”;使用cdn
- "$"未定义;jquery在<头部>;没有冲突的脚本或库
- "脏的“;函数,需要脚本将触发延迟到加载数据之后
- 使用javascript"随机引用“;脚本,但跨越两个独立的元素
- 避免“;无响应脚本"foreach循环中的消息
- 为什么“</脚本>"在脚本标记中,标记被视为结束标记<h1>hlo</h1>&qu
- 我怎么能"保存“;变量客户端,这样我就可以在其他java脚本事件中使用它
- MVC 4无法定位“;脚本"文件夹
- 为什么可以't我将JS代码置于<script src=“">代码</脚本>