Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox加载项:从选项卡获取文档_Javascript_Firefox_Firefox Addon_Document_Firefox Addon Sdk - Fatal编程技术网

Javascript Firefox加载项:从选项卡获取文档

Javascript Firefox加载项:从选项卡获取文档,javascript,firefox,firefox-addon,document,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Document,Firefox Addon Sdk,我只是试图获取选项卡的文档并从中读取信息,但是如果我试图读取附加模块端的信息,我会得到一个错误“doc.getElementById不是一个函数”。在内容脚本中,它运行良好。那么,通过self.port传递整个对象是否存在问题 var tabs = require('sdk/tabs'); var myTab; var myScript = "self.port.on('getDocument', function() {" + " var doc = windo

我只是试图获取选项卡的文档并从中读取信息,但是如果我试图读取附加模块端的信息,我会得到一个错误“doc.getElementById不是一个函数”。在内容脚本中,它运行良好。那么,通过self.port传递整个对象是否存在问题

var tabs = require('sdk/tabs');
var myTab;
var myScript = "self.port.on('getDocument', function() {" +
               "  var doc = window.document;" +
               "  console.log(doc.getElementById('lga').style.height);" +
               "  self.port.emit('answer', doc);" +
               "})";

for each (var tab in tabs) {
    if (tab.url == "https://www.google.com/") {
        myTab = tab;
    }
}

worker = myTab.attach({
    contentScript: myScript 
});

worker.port.emit("getDocument");

worker.port.on("answer", function(doc) {
  console.log(doc.getElementById('lga').style.height);
});

您只能通过可以序列化为JSON的消息传递值<代码>文档,作为文档,无法传递

在消息中,您可以传递样式的实际值:

self.port.emit('answer', doc.getElementById('lga').style.height);

不要尝试将文档导入到
main.js
,而是在
data
文件夹
ContentScript.js
中创建一个新的Javascript文件。将其插入页面,如下所示:

worker = myTab.attach({
    contentScriptFile: require('sdk/self').data.url('ContentScript.js')
});
同时,在ContentScript.js中

var doc = window.document;
//Now have your way with the document
然后,如果您需要main.js中的任何变量,请按照@nmaier所说的去做


我意识到这可能是显而易见的,但这是预期的行为,这意味着您不必以字符串形式编写脚本,并提供更详细的日志记录

该死的。:/我想没有其他方法可以获取整个文档?没有,预期的行为是所有与页面的交互都发生在内容脚本中。