我正在使用Add-on Builder Beta(Firefox),我正在尝试这样做:
(Addon Builder中有3个部分:Lib,Data,Libraries)
从数据部分获取“def.htm”文件并在新选项卡中打开它 我是这样做的:
var tabs = require("tabs");
var data = require("self").data;
tabs.open(data.url('def.htm'));
从“def.htm”获取JSON定义 def.htm看起来像这样:
<html><head>
<title>Def title</title>
</head><body>
<script type="text/javascript">
this.definition = {
aaa: 1000,
bbb: {
ccc: {
ddd: "eee",
...
...
};
</script>
</body></html>
调用JS函数并将定义传递给它:
它适用于Jetpack扩展(在Firefox 3.5上),这是代码:
jetpack.tabs.onReady(function() {
var window = this.contentWindow.wrappedJSObject;
var def = window.definition;
dowork (def);
});
我需要在附加SDK上使用相同的功能。
答案 0 :(得分:1)
这是一种相当奇怪的方法,为什么要尝试以如此复杂的方式获取JSON数据?如何将其放入文件data/definition.json
(然后正确编码):
{
"aaa": 1000,
"bbb": {
"ccc": {
"ddd": "eee",
...
...
};
读出来
var Request = require("request").Request;
var data = require("self").data;
Request({
url: data.url("definitions.json"),
onComplete: function(response)
{
dowork(response.json);
}
});
但是,如果您真的想要在标签中访问数据 - 附加SDK不允许直接访问您的扩展程序中的内容页面。您可以使用page-mod
package将内容脚本注入此页面,然后将该数据发送回扩展程序。这些方面的东西:
var PageMod = require("page-mod").PageMod;
PageMod({
include: data.url("def.htm"),
contentScriptWhen: 'end',
contentScript: 'self.postMessage(definition)',
onAttach: function onAttach(worker)
{
worker.on("message", function(data)
{
dowork(data);
});
}
});