所以我有一个外部的javascript文件,让我们调用它something.js
然后我将它写入文档。出于某种原因,我无法访问Safari或FireFox中的功能。
它有点像这样:
<script type="text/javascript">
document.write(decodeURI("%3Cscript src='something.js' type='text/javascript'%3E%3C/script%3E"));
myFunction();
</script>
所以这告诉我myFunction为null,但如果我在something.js的末尾放置相同的函数调用,它就可以了。现在这不是确切的情况,所以我知道对于这个特例,这不是最好的方法。
答案 0 :(得分:3)
我是这样做的:
<script type="text/javascript" language='javascript'>
document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="something.js"><\/script>');
var contentloadtag=document.getElementById("contentloadtag");
contentloadtag.onreadystatechange=function(){
if (this.readyState=="complete") { myFunction(); }
}
</script>
真的,这只在页面加载时才有意义。如果您以动态方式反复下载脚本,您可能希望采用不同的方法,即JSONP。
答案 1 :(得分:2)
我认为这是因为myFunction();
在包含它的整个.js文件被调用之前被调用,尝试延迟myFunction();
调用几秒钟并再次测试以确保这是问题
答案 2 :(得分:0)
使用document.write打印脚本包含标记后,浏览器会在加载外部脚本之前继续执行(尝试调用myFunction()
)。所以,你的脚本还没有。
答案 3 :(得分:0)
script
块放入
您文档的head
(如果不是
已)myFunction()
来电。myFunction()
电话放入其他电话
script
阻挡在较低的地方
文件。第1步是最佳做法,但我不认为如果您在文档中的其他位置动态包含JS文件,任何浏览器都会窒息。
关键是你不能在包含的同一个脚本块中使用包含的JS代码。
这适用于Firefox,我不能担保Safari。
<html>
<head>
<script type="text/javascript">
document.write(decodeURI("%3Cscript src='something.js' type='text/javascript'%3E%3C/script%3E"));
</script>
</head>
<body>
<script type="text/javascript">
myFunction();
</script>
</body>
</html>
答案 4 :(得分:0)
我通常不会写两个单独的答案,但这是一个非常不同的答案,这也是可行的。
在something.js的底部拨打something_ready()
。不要在something.js中定义something_ready()
,在html文档中定义它。
所以没有计时器,没有不必要的检查。
<script type="text/javascript">
document.write(decodeURI("%3Cscript src='something.js' type='text/javascript'%3E%3C/script%3E"));
function something_ready(){
myFunction();
}
</script>
这将有效,它只是假设你有权访问something.js,你可能没有。如果没有,我提供的其他答案将有效。
答案 5 :(得分:0)
这有用吗?
<script type="text/javascript">
document.write(unescape("%3Cscript src='something.js' type='text/javascript'%3E%3C/script%3E"));
document.write("<"+"script type='text/javascript>myFunction();<"+"/script>");
</script>
答案 6 :(得分:0)
最简单的方法是编写两个&lt; script&gt;块。
<script type="text/javascript">
document.write(decodeURI("%3Cscript src='something.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
myFunction();
</script>
当使用 document.write 时,文本会直接写入文档,就在&lt; script&gt;之后。标签。因此,当浏览器遇到&lt; script&gt;标记,它等待脚本完成加载,然后继续向下页面。加载的脚本中发生的任何 document.write 可能会影响页面的其余部分(例如,如果您执行“document.write('&lt; div&gt;')”,则会影响其余部分的布局)。
所以,如果你使用两个&lt; script&gt;标签,浏览器遇到第一个标签,并使用 document.write 输出新的&lt; script&gt;标签。只要那个&lt; script&gt;标签完成后,浏览器继续向下移动页面,并立即遇到新的,动态添加的&lt; script&gt;标签。这个&lt;脚本&gt;标签告诉浏览器加载外部Javascript。浏览器将等待执行第二个原始&lt; script&gt;标记直到此&lt; script&gt;标签已完成加载。然后您的函数 myFunction 将可用。
在一个&lt; script&gt;中完成所有操作的原因标记不起作用是因为 document.write 直到&lt; script&gt;之后才会发生已完成运行( myFunction 尚未推出)。它适用于两个&lt; script&gt;的原因标签是因为浏览器等到每个&lt; script&gt;标记连续运行, document.write 放置一个新的&lt; script&gt;标记在行。