2014-10-29 82 views
3

我想创建一个非常简单的测试插件,它可以做一件事:从main.js打开一个html页面(位于数据文件夹中),然后传递它一些生成的它可以显示的JSON。我已经想出了一个非常复杂的方法来使用消息传递和克隆unsafeWindow.options来实现这一点,但是必须有一个更简单的方法吗?从main.js打开页面,并将数据传递给它

ps。我很高兴地使用“插件页”模块,如果这是这样做的正确方法...

回答

0

打开一个标签一个简单的模板,然后在选项卡已准备就绪,附加内容的脚本,通过一些参数,和建立消息处理程序:

在附加模块:

var resourceURL=require("sdk/self").data.url; 
require("sdk/tabs").open({ 
    url:resourceURL("index.html"), 
    onReady:function(tab){ 
     var worker=tab.attach({ 
      contentScriptFile:["support.js","content.js"].map(resourceURL), 
      contentScriptOptions:{}, //parameters passed to content script 
     }); 
     worker.port.on("ready",function(msgIn){ 
      worker.port.emit("acknowledge",msgOut); 
     }); 
    } 
}); 

而在内容脚本;要发送“准备就绪”的消息,并收到“确认”消息:

self.port.on("acknowledge",function(msgIn){}); 
self.port.emit("ready",msgOut); 

有可能是这样的,相对路径是允许无需需要更改的参数url和/或contentScriptFile,处理( “SDK /自”)。data.url。不确定这只是推测/建议还是目前正在实施;没有检查。

而且我觉得addon-page折旧和自升级到芦苇UI(即导航栏不再隐藏特殊的URI像约:插件)没有奏效。

+0

你是一个大复印机! – EpokK 2014-10-30 09:08:42

+0

@EpokK我不知道你在说什么。你从哪里指责我或从谁那里抄袭?我只是看了一些我的旧代码的指导(旧的,因为它很久以前我就这样)。 – jongo45 2014-10-30 09:16:54

0

您可以使用端口在这样的另一种观点发送数据:

为主。 JS

// Create a menu panel 
var menu = panels.Panel({ 
    contentURL: data.url("menu.html"), 
    contentScriptFile: data.url("menu.js"), 
}); 

// Your data 
var data = {animal: 'panda'}; 
menu.port.emit('data', JSON.stringify(data)); 

menu.js

self.port.on('data', function onReceiveData(data) { 
    console.log(data); 
}); 
+0

我很确定原来的提问者想要打开一个新标签并将内容文件(html,脚本)加载到标签中。如果您打算将数据用于除console.log以外的其他内容,那么在通过'menu.port.emit'发送它之前,您应该''JSON.stringify(data)''。 – jongo45 2014-10-30 09:30:52

+0

是的,我需要在普通标签中打开html页面,而不是在面板中。 – rednoyz 2014-10-30 11:53:26