我知道通过在页面的头部或正文中添加<style>
或者<link>
标签可以实现动态加载脚本和样式表,但这样做会导致浏览器一旦下载就会立即执行。我在思考其他下载但不执行javascript/css代码的方法。首先,我想到了XMLHttpRequest。
//simple execution received script
var executeScript = function(code){
eval(code);
};
//create XMLHttpRequest in cross-browser manner
var xhr = createXMLHTTPObject();
//check whether file is loaded
var checkStatus = function(){
if(xhr.readyState == 4){
if(xhr.status >= 200 && xhr.status < 300 || xhr == 304){
executeScript(xhr.responseText);
}
else {//error
}
}
};
//do request
xhr.open('get','http://podlipensky.com/examples/dynamicscript/hey.js', true);
xhr.onreadystatechange = checkStatus;
xhr.send(null);
但是由于同源策略(Same Origin Policy),我们在这种情况下受到来自同一个域的脚本的限制(尽管我们可以尝试使用CORS来解决它)
另一种方法,我想到的是在页面中动态添加iframe
,然后添加script
标签到iframe
中,使得脚本一旦下载便会被执行,但它是在另一个页面 - iframe
中执行。
还有其他下载但不执行脚本的方法吗?
更新:
下载但不执行javascript/css的一个原因之一是预加载第三方库,但只在需要时使用它们。