如何在运行时添加脚本?(文档.Write不是一个函数)

How to add a script at runtime? (document.write is not a function)

本文关键字:函数 一个 Write 文档 运行时 添加 脚本      更新时间:2023-09-26

我试图在运行时为我的Xul应用程序添加一个脚本,使用:

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

但是我得到了:

错误:文档。写作不是一个函数

函数确实存在于文档中。我还从文档中得到了这个例子:

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

但是我得到了:

文档。Open不是函数

你知道怎么了吗?

,

也许我可以把我的js代码在一个javascript模块和导入它与组件。utils.import(寻找在哪里把资源和如何引用它)

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

您应该评估是否真的需要使用XHTML。如果没有,那么您将能够使用document.write。但是如果这样做,则需要使用另一种方法来操作DOM。可以直接使用DOM方法,也可以使用jQuery等辅助库。

从这个例子

使用XUL中的createElement方法让你完成类似的事情文档。用HTML写,用它你可以创建新的页面和部分网页。

你有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>

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

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

由于自动document.open()

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

从记忆中,我认为旧版本的IE只是给出了一个错误,如果你在页面加载后使用document.write(),但我不能费心在他们的文档中找到任何东西。

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

为什么要在这个实例中执行document.write() ?为什么不直接包含你的脚本呢?

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

第一种方法是通过下标加载器。

第二种方法是创建一个加载脚本的覆盖,并动态加载覆盖。