我一定在这里遗漏了什么?
如果我有一个函数说你的.js文件如:
function sayHi(){
alert('Hi there');
}
然后在html文件中我有:
...
<head>
...
<script>your.js</script>
<script>
function sayHi(){
alert("G'day mate.");
}
...
为什么我得到“你好”,我认为html文件中的那个会覆盖js文件中的那个?
几点,你的.js文件无法更改或替换,并且html文件是通过iFrame加载的,因此它没有正文部分,除了html文件之外我无法更改任何内容。 我之前在一个后续的.js文件中做过这个,但是在html文件中没有这个想法吗?
答案 0 :(得分:0)
首先,我的解决方案是:
<script id="your-js" data-src="./your.js"></script>
<script>
var sayHi;
window.onload = function () {
var yourJs;
yourJs = document.querySelector("#your-js");
yourJs.setAttribute("src", yourJs.getAttribute("data-src"));
yourJs.onload = function () {
sayHi = function () {
alert("G'day mate.");
};
};
};
</script>
此外,我在某些浏览器(firefox,safari,chrome)中尝试your code
,但没有一个像你的那样(警告G'day伙伴。)。
我认为它的机制名为lookahead pre-parser
(或Chrome中的preloader
)。浏览器总是准备两个解析器,主解析器解析普通资源,另一个解析器负责解析重量级资源(如外部js,样式表,图像)。
因此,.js文件并不总是按顺序加载。
但是(!)我想了想,然后我用window.onload
围绕.js文件中的代码,如:
var sayHi;
window.onload = function (){
sayHi = function (){
alert('Hi there');
}
};
然后我得到与你相同的结果(警告'嗨那里') <{1}}将在整页加载后执行。
愿这有用:/