当从Chrome扩展动态注入JS时,从onload()内部调用方法
Calling a method from inside onload() when dynamically injecting JS from Chrome extension?
这个奇妙的答案展示了如何从Chrome扩展动态地将JavaScript插入页面
var s = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.extension.getURL('script.js');
s.onload = function() {
this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);
当调用onload()
函数时,它是在浏览器页面的孤立世界中执行的,而不是在扩展的孤立世界,对吧?
假设这是正确的,我有一个我不理解的问题。
在我的script.js
内部,我有类似的代码:
var globalObj = globalObj || {};
globalObj.method = function () {
console.log('hey!');
};
然后我把上面的onload()
函数改为:
s.onload = function() {
this.parentNode.removeChild(this);
globalObj.method();
};
但控制台显示错误:
Uncaught ReferenceError: globalObj is not defined
为什么globalObj
没有在onload()
函数内部定义?
onload
在内容脚本上下文中执行,而不是在页面上下文中执行。
要在页面上下文和脚本上下文之间进行通信,可以使用各种方法;例如,一个自定义DOM事件将实现您在这里需要的内容:
// Content script
s.onload = function() {
this.parentNode.removeChild(this);
var event = new CustomEvent("invokeMethod");
};
// script.js
window.addEventListener("invokeMethod", function(evt) {
globalObj.method();
}, false);
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调用函数内部的函数
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 在phonegap应用程序内部重定向不起作用
- 使用此选项选择父类内部的类
- 访问JSON对象内部的数组元素
- 从模块内部访问Express装载路径
- AngularJs指令,该指令创建内部有数据对象的新指令
- window.onload没有'无法在Android WebView中工作
- 如何使用内部对象构造对象
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- 用Javascript修改内部标记的CSS规则
- javascript函数内部的代码用逗号而不是分号分隔
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- JavaScript-如何将onload函数内部定义的变量取到外部
- 尽管有onload函数,但替换内部HTML失败
- Javascript onload事件未在对象内部激发
- 从Onload方法Titanium内部获取TableViewRow的索引
- 文件读取器内部的函数.javascript中没有执行Onload
- JavaScript 保存这个.image.onLoad 内部的变量