如何在运行时添加脚本? (document.write不是函数)

时间:2011-05-04 19:36:41

标签: javascript xul

我尝试在运行时向我的Xul应用程序添加一个脚本:

document.write('<script type="text/javascript" src="chrome://myapp/content/myscript.js"/>');

但我得到了:

  

错误:document.write不是   功能

该功能确实存在in the docs。我从文档中得到了这个例子:

document.open();
document.write("<h1>Out with the old - in with the new!</h1>");
document.close();

但我得到了:

  

document.open不是函数

知道什么是错的吗?

- 更新

也许我可以将我的js代码放在Javacript模块中并使用Components.utils.import导入它(寻找放置资源的位置以及如何引用它)

5 个答案:

答案 0 :(得分:0)

如果您使用XHTML,则document.write功能不可用;见:http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite。您可能正在使用XHTML。

您应该评估您是否确实需要使用XHTML。如果没有,那么您将能够使用document.write。但是如果你这样做,你将需要使用另一种方法来操纵DOM。您可以使用DOM方法直接执行此操作,也可以使用诸如jQuery之类的帮助程序库。

答案 1 :(得分:0)

来自this example

  

在XUL中使用createElement方法   让你完成类似的事情   HTML中的document.write,与您一起使用   可以创建新的页面和部分   网页。

答案 2 :(得分:0)

你是否在脚本标签内有javascript?你是否在代码中的某个地方启动了这个功能?它不会自行运行。

这有效:

<html>
<head>
<script type="text/javascript">
function addCont(){
document.open();
document.write("<h1>New text</h1>");
document.close();
}
</script>
</head>
<body onload="addCont()">
<p>Some text...</p>
</body>
</html>

答案 3 :(得分:0)

你在另一个答案的评论中说你正在从一个setTimeout调用的函数中执行document.write(),该函数本身就在onload中。 我建议不要在页面加载后使用document.write()。根据Mozilla doco:

  

自动document.open()调用   在document.write()时发生   在页面加载后调用,但是   这在W3C中没有定义   说明书

因为自动document.open()

  

如果目标中存在文档,则此方法将其清除

从内存中我认为,如果你在页面加载后使用了document.write(),那么IE的旧版本只会出错,但我不会想要在他们的doco中找到任何东西。

正如其他人提到的,它不适用于xhtml。

为什么你甚至想在这个实例中做document.write()?为什么不直接包含您的脚本?

答案 4 :(得分:0)

有两种方法可以在运行时动态加载脚本。

第一种方式是通过subscript loader

第二种方法是创建一个可以动态加载脚本的叠加层load the overlay