Firefox加载项:从选项卡获取文档
Firefox Add-on: get document from a tab
我只是想获取一个选项卡的文档并从中读取信息,但如果我试图读取加载项侧的信息,我会收到一个错误"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("answerswer", function(doc) {
console.log(doc.getElementById('lga').style.height);
});
您只能通过可以序列化为JSON的消息传递值。doc
作为文档,无法传递。
在您的消息中,您可以传递样式的实际值:
self.port.emit('answer', doc.getElementById('lga').style.height);
与其尝试将文档导入main.js
,不如在data
文件夹ContentScript.js
中创建一个新的Javascript文件。用contentScriptFile
将其注入页面,如下所示:
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所说的操作。
我意识到这可能是显而易见的,但这是预期的行为,这意味着您不必将脚本写成字符串,并提供更详细的日志记录。
相关文章:
- 无法获取文档.GetElementById工作正常
- 用javascript从窗口获取文档,同时检查文档是否已加载
- 如何获取文档id's在BaasBox[0.9.2]中使用java脚本
- 如何获取文档数组中元素的计数-MongoDB
- node.js使用monk从数组中按id获取文档
- 无法获取文档.getElementByID(“testclick”).addEventListener
- 无论如何都要获取文档.在不删除整个页面的情况下写入即可工作
- Firefox加载项:从选项卡获取文档
- 获取文档的所有元素,id为'主导航'
- 在执行客户端脚本后获取文档源
- 获取文档的第一个字母
- jQuery 获取文档宽度和高度,不包括水平/垂直滚动条
- 如何获取文档片段中的所有文本节点
- Javascript:根本无法获取文档的实际宽度(jsfiddle提供)
- 获取文档的当前顶部位置
- 使用 JavaScript 获取文档标题元
- XPages:如何在视图中获取文档并读取值
- Windows Phone WebBrowser:获取文档高度的正确方法
- 使用 jquery 或任何首选库获取文档中包含的所有元素及其当前值
- MongoDB:获取文档和数组的一个对象