Chrome扩展javascript函数未定义
Chrome extension javascript function is not defined
我正在开发一个chrome扩展,遇到了一个问题,我无法解决;/
我写了manifest文件和一些java脚本代码。除了按钮,一切都很好。当我点击它们时,它们应该用参数触发echo函数,并将其进一步发送到firebreath中开发的插件。当我在html文件中手动注入代码时,一切都很好,但当通过javascript注入代码时,chrome控制台给我一个消息,回声函数没有定义。我尝试了几种方法来注入代码,但都不起作用。
所以我向程序员们寻求帮助或一些好的建议。(第一个帖子shy)
javascript主文件chrome_script.js
var Reg = /('+48's?[0-9]{3}['-' ]?[0-9]{3}['-' ]?[0-9]{3})|('+48's?['(' ]?[0-9]{2}[')' ]?[0-9]{2,3}['-' ]?[0-9]{2}['-' ]?[0-9]{2})/g
var content = document.body.innerHTML;
var phoneNumbers = content.match(Reg);
document.getElementsByTagName('head')[0].innerHTML +='<script src="'+chrome.extension.getURL("plug_fun.js")+'" type="text/javascript"></script>';
content = "<object id='"plugin0'" type='"application/x-testplugin'" width='"100%'" height='"300'"></object>" + content;
for (var i = 0; i < phoneNumbers.length; i++) {
content = content.replace(phoneNumbers[i], "<button id='"" + i + "'" type='"button'" onclick='"javascript:echo(" + phoneNumbers[i].replace(new RegExp("['+' ]", "g"),"") + ")'">" + phoneNumbers[i] + "</button>");
}
document.body.innerHTML = content;
javascript文件plug_fun.js,用于插件和按钮
function plugin0(){
return document.getElementById('plugin0');
}
plugin = plugin0;
function echo(a){
var num = String(a);
plugin().echo(num);
}
manifest文件manifest.json
{
"name": "Phone Injection",
"version": "0.2",
"browser_action": {
"default_icon": "Phone.ico"
},
"permissions": [
"tabs", "http://*/*", "https://*/*", "file://*"
],
"plugins": [
{ "path": "npTestPlugin.dll", "public": true }
],
"content_scripts": [ {
"matches": ["http://*/*", "https://*/*", "file://*"],
"js": ["chrome_script.js", "plug_fun.js"]
}]
}
点击按钮时捕获的错误
Uncaught ReferenceError: echo is not defined
Chrome扩展中的内容脚本在谷歌称为"孤立世界"的东西中执行。这意味着不同的脚本不允许看到或相互交互,并且看起来好像没有其他JavaScript在页面上执行。查看下面直接从Google文档获取更多信息:
内容脚本在称为孤立世界的特殊环境中执行。它们可以访问被注入的页面的DOM,但不能访问该页创建的任何JavaScript变量或函数。它将每个内容脚本视为在其运行的页面上没有其他JavaScript正在执行。反过来也是如此:在页面上运行的JavaScript不能调用任何函数或访问由内容脚本定义的任何变量。引用自:http://code.google.com/chrome/extensions/content_scripts.html#execution-environment
我建议尝试把代码,将接口与firebreath插件在后台脚本代替,虽然我会仔细检查,并确保那些不也在孤立的环境中执行。
尝试按如下方式重新排列您的清单;
"content_scripts": [ {
"matches": ["http://*/*", "https://*/*", "file://*"],
"js": ["plug_fun.js", "chrome_script.js"]
}]
现在,在chrome_script.js
中,您不需要手动添加plug_fun.js
文件,因为清单已经提前为您加载了它,所以希望您现在应该发现echo
存在。但是,我不能100%确定,因为我从来没有在我的内容脚本中使用过这种分隔。
NPAPI插件(包括在FireBreath中开发的插件)并不总是在将它们放入页面后立即可用。我会首先尝试设置一个setTimeout来延迟尝试调用plugin().echo()大约一秒;如果这不起作用,你的问题就出在别的地方了。如果它确实有效,那么你可以添加一个onload参数标签,其中包含插件启动时应该调用的函数的名称。请注意,NPAPI只允许在param标签中传递字符串,因此它需要是全局函数的名称。
查看FireBreath FBTestPlugin test.html中的onload参数示例
- Jquery未定义函数正在停止其他操作
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- Uncaught ReferenceError:尝试在Android网络视图中访问时未定义函数
- jQuery文件上传和验证未定义函数
- 引用错误:未定义函数-Firefox
- res.render中出错,未定义函数
- 神秘的未定义函数
- 尝试使用函数和Ajax修改值时未定义函数
- 引用错误:未定义函数
- ReferenceError:未定义函数
- 在 Angular JS 中使用 ng-include 的未定义函数
- 未捕获的引用错误:未定义函数
- j查询工具提示引发错误:未定义函数
- 未捕获的引用错误: 未定义单击世界 -- 未定义函数
- JS:引用错误:未定义函数
- 茉莉花未定义函数
- Javascript 错误:未捕获的引用错误:未定义 [函数]
- 未定义函数
- 尽管 js 文件引用在标头中,但未定义函数
- Javascript 未定义函数错误