javascript-Firefox插件SDK和DOM操作问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-Firefox插件SDK和DOM操作问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3183字,纯文字阅读大概需要5分钟。
内容图文
![javascript-Firefox插件SDK和DOM操作问题](/upload/InfoBanner/zyjiaocheng/658/89eda1bae4d84d7d9a1ecc766e94d02d.jpg)
我正在尝试使用Firefox插件SDK(据我所知以前称为Jetpack),但是在使用DOM时遇到了问题.
加载网页时,我需要遍历DOM中的所有文本节点,并对它们包含的某些字符串进行更改.我在下面发布了我正在做的事情的简化版本(是Javascript的新功能,因此请原谅我).
// test.js
function parseElement(Element)
{
if (Element == null)
return;
var i = 0;
var Result = false;
if (Element.hasChildNodes)
{
var children = Element.childNodes;
while (i <= children.length - 1)
{
var child = children.item(i);
parseElement(child);
i++;
}
}
if (Element.nodeType == 3)
{
// For testing - see what the text node contains
alert(Element.nodeValue);
Result = true;
}
return Result;
}
window.addEventListener("load", function load(event)
{
window.removeEventListener("load", load, false);
parseElement(document.body);
}
当我创建基本的HTML文档时:
<!-- test.html -->
<html>
<head>
<script type="text/javascript" src="test.js"></script>
</head>
<body>
<b>hello world</b>
<p>foo</p>
<i>test</i>
</body>
</html>
…在HEAD部分中包含此Javascript文件,然后在Firefox中打开它,“警告”显示6个对话框,其中包含:
1) "hello world"
2) blank -> no visible characters, just a newline
3) "foo"
4) blank -> no visible characters, just a newline
5) "test"
6) blank -> no visible characters, just a newline
正是我期望看到的.
当我创建一个插件并将test.js用作main.js文件中的页面修改内容脚本时,就会出现问题(已修改为删除“ addEventListener”部分).当我使用“ cfx run”启动安装了我的插件的Firefox,然后打开相同的HTML文档(对test.js文件的“ script”部分进行了注释)时,警报根本不显示.
这是第一个难题.但是,在导航到其他网页(例如YouTube视频页面)后,警报确实显示了多个对话框,但它们包含非常奇怪的字符串,主要是脚本标签的内容:
编辑我没有足够的声誉来嵌入图像,因此,这里有一个链接代替显示了我的意思:http://img46.imageshack.us/img46/5994/mtpd.jpg
再次,我希望看到的文本不存在.
为下面的一些冗余而道歉,但要清楚一点:这是我的main.js:
main.js
var data = require("sdk/self").data;
var data = require("sdk/self").data;
exports.main = function()
{
pageMod.PageMod({
include: "*",
contentScriptFile: [data.url("test.js")]
});
}
Javascript文件的修改后的版本与上面列出的“ test.js”相同,但是在最后一部分:
test.js
<snip>
...
return Result;
}
parseElement(document.body);
我已经将我的项目文件(如果可以叫它们的话)包含在一个zip中,如果它使事情更容易可视化:http://www.mediafire.com/?774iprbngtlgkcp
我尝试改变
parseElement(document.body);
至
parseElement(unsafeWindow.document.body);
以防万一,但结果是相同的.
所以我对发生的事情感到非常困惑.当我将它用作插件的一部分时,我无法理解为什么test.js文件没有从DOM中选择文本节点(而且仅文本节点),但是当作为附件包含在其中时,我的预期与我预期的完全一样HTML文档中的脚本.谁能对此有所启示?
先感谢您.
解决方法:
您的lib代码和contentScript中的错误通常记录到错误控制台中.检查那里打印了什么.另请参见SDK控制台模块.
您的page-mod将不会运行,因为默认情况下,page-mod将仅在load事件之后运行.
请参阅contentScriptWhen文档.
脚本标签实际上通常具有包含嵌入式脚本源的文本节点子级.因此,将这些枚举也绝对是正常的.
有关步行树节点的一些讨论,请参见:getElementsByTagName() equivalent for textNodes
但是,如果您使用的是特定ID /类的文本,请考虑使用document.querySelector/.querySelectorAll,或者如果您使用的是具有特定XPath的节点,请使用document.evaluate.这很有可能会更快.
除此之外,我真的无法确切地说出您剩下的问题到底是什么,以及您首先要实现的目标,因此我无法就此提出建议.
内容总结
以上是互联网集市为您收集整理的javascript-Firefox插件SDK和DOM操作问题全部内容,希望文章能够帮你解决javascript-Firefox插件SDK和DOM操作问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。