【发布时间】:2014-12-22 17:26:56
【问题描述】:
使用 Firefox 34 和插件 SDK 1.17。
我正在使用 SDK 的 page-mod 来附加内容脚本。在内容脚本中,我在尝试访问 DOM 元素时看到了非常奇怪的行为。
main.js
pageMod.PageMod({
include: "somewebsite",
contentScriptWhen: 'end',
contentScriptFile: [data.url("stuff.js")]
});
stuff.js
log(document.getElementsByTagName("body")); // empty object
log(document.getElementById("SomeIdThatShouldBeThere")); // empty object
log(document.getElementsByTagName("li")); // x amount of empty objects...
这将按预期工作:
document.body.style.border = "5px solid red";
对于我得到的空对象我也可以做
obj.style.border = ...
它会起作用,看到 html 元素会改变边框颜色等。但我无法读取元素的属性,所以我在盲目工作。
我读到有人说从内容脚本修改 DOM 有一些限制,但我显然连最基本的事情都做不了。这应该支持还是不支持?
edit:最终我注意到元素位于正确的位置并且我可以读取它们的属性,但是记录元素仍然只会打印一个空对象...这意味着元素的每个所需属性都必须单独打印.至少它有效,但可能会更好。
【问题讨论】:
-
你试过用
unsafeWindow.document代替document吗? -
好像没什么区别。
-
顺便说一句,您的代码中有错字。它应该是
getElementById,而不是getElementsById(注意s)。但我不明白为什么getElementsByTagName返回空对象。您是否在控制台中看到这些空对象? -
squint:我得到了页面上应该显示的元素的实际数量。就在我打印单个元素时,它看起来像一个没有任何属性的空对象。属性仍然可以正常访问
-
不知道如果你最终得到了这个,但我遇到了同样的问题并且做了更多的研究我怀疑它与内容脚本如何与 DOM 隔离有关@ 987654321@
标签: firefox firefox-addon-sdk content-script