如何使用.html文件中的一个覆盖外部.js文件中的函数?

时间:2015-09-23 09:15:29

标签: javascript html

我一定在这里遗漏了什么?

如果我有一个函数说你的.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文件中没有这个想法吗?

1 个答案:

答案 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}}将在整页加载后执行。

愿这有用:/