尝试在内容脚本中调用函数时,“函数未定义”
'Function is not defined' when trying to call a function inside a contentScript
插件代码,创建一个Panel
。
onShow()
,从本地文件系统读取文件列表并将其填充到Panel
中。
单击文件名旁边的<img>
时,我正在尝试调用Namespace.load()
,以向我的插件代码发送消息,但是我得到了Namespace is not defined
.
知道为什么吗?
Data.js
var data = require("sdk/self").data;
exports.get = function(content) {
return data.url(content);
};
main.js
var Data = require("./Data");
var panel = Panel.Panel({
width: 450,
height: 300,
contentURL: Data.get("html/view.html"),
contentScriptFile: Data.get("js/controller.js"),
});
错误。。
JavaScript error: resource://jid1-xqhae0e9m07ekq-at-jetpack/addon-firefox/data/html/view.html, line 1: Namespace is not defined
controller.js
(内容脚本) ..
var Namespace = {
load: function(filename) {
self.port.emit("load", filename);
}
};
self.port.on("uiData", function (uiData) {
var parsed = JSON.parse(uiData),
content = '';
for (var i = 0; i < parsed.files.length; i++) {
content = '<tr>';
content += '<td>' + parsed.files[i] + '</td>';
content += '<td><img onclick="Namespace.load(' + parsed.files[i] + ');" src="../images/load-24.png"></img>';
content += '</td></tr>';
document.getElementById('resultFiles').innerHTML += content;
}
document.getElementById("directory").value = parsed.directory;
});
使用了Components.utils.exportFunction,因为FF30中内容脚本的执行环境发生了变化,如此处所述。
var Namespace = {
load: function(filename) {
self.port.emit("load", filename);
}
};
exportFunction(Namespace.load, unsafeWindow, {defineAs: "load"});
self.port.on("uiData", function (uiData) {
var parsed = JSON.parse(uiData),
content = '';
for (var i = 0; i < parsed.files.length; i++) {
content = '<tr>';
content += '<td>' + parsed.files[i] + '</td>';
content += '<td><img onclick="window.load(''' + parsed.files[i] + ''');" src="../images/load-24.png"></img>';
content += '</td></tr>';
document.getElementById('resultFiles').innerHTML += content;
}
document.getElementById("directory").value = parsed.directory;
});
我认为工作代码如下所示:
var data = require("sdk/self").data;
var panel = Panel.Panel({
width: 450,
height: 300,
contentURL: data.url("html/view.html"),
contentScriptFile: data.url("js/controller.js"),
});
您可以通过 self.data.url() 获取给定文件的资源 uris。有关详细信息,请参阅面板上的文档。
相关文章:
- 现有函数未定义
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- AngularJS ng repeat显示原型函数未定义
- jQuery onclick 函数:未定义不是一个函数
- 函数未定义
- 为什么在jsfiddle中显示ReferenceError:函数未定义
- 函数未定义,实际定义时为
- 函数未定义的Javascript(Basic)
- ajax函数未定义
- 为什么window.onload函数未定义
- 模块模式:函数未定义
- 包含的javascript源代码通过PHP,onmousemove事件,函数未定义
- 单击链接时出现函数未定义错误
- AngularJS和Angular Snap:SSnap构造函数未定义
- 在Node.js中,从同一文件中的另一个函数引用一个函数会导致'ReferenceError:-函数-未定义
- symfony trick javascript函数未定义
- 不断获取JS函数未定义错误
- AngularJS HTTP 资源 - 响应函数未定义
- 函数未定义,参数格式
- JavaScript 中的函数未定义