我正在做page-mod
tutorial。
这是我的代码:
main.js
var tag = 'p'
var data = require('sdk/self').data
var pageMod = require('sdk/page-mod')
pageMod.PageMod({
include: '*',
contentScriptFile: data.url('element-getter.js'),
onAttach: attachHandler
})
function attachHandler(worker) {
console.log('worker ', worker)
worker.port.emit('getElements', tag)
worker.port.on('gotContent', function(content) {
console.log('received content ', content)
})
}
element-getter.js
:
self.port.on('getElements', function(tag) {
console.log('received tag ', tag)
var elements = document.getElementsByTagName(tag)
console.log('found elements ', elements)
for (var i=0; i< elements.length; i++) {
self.port.emit('gotContent', elements[i].innerHTML)
})
})
(也可在github.com/findjashua/pgmod中找到)
它只在终端上记录第一条消息,在浏览器控制台上没有记录。从消息中,您可以看到它认为contentScript
为空。我在这做错了什么?
以下是登录终端的内容:
console.error: pgmod:
Message: SyntaxError: syntax error
console.log: pgmod: worker constructor {"contentScriptFile":"resource://jid1-kkjpd9s1yzxe9g-at-jetpack/pgmod/data/element-getter.js","contentScript":null,"port":{}}
答案 0 :(得分:0)
抱歉,SyntaxError
让我分心了。它是SyntaxError
,但不是由于编码。
来自你的回购:
self.port.on('getElements', function(tag) {
console.log('received tag ', tag)
var elements = document.getElementsByTagName(tag)
console.log('found elements ', elements)
for (var i=0; i< elements.length; i++) {
self.port.emit('gotContent', elements[i].innerHTML)
}) // <-- trailing parenthesis, left-over from having .forEach in there before
})
通过删除尾部括号来修复此问题后,代码对我有效。