我喜欢将动态CSS文件添加到“父”窗口。
我为其构建以下代码:
function LoadJSCSSFile(filePath,fileType,parentBOO){
//-
var fileRef; // Get the file reference
//-
//Set external JavaScript/CSS file
switch(fileType){
case "js":
fileRef = document.createElement('script');
fileRef.setAttribute("type","text/javascript");
fileRef.setAttribute("src", filePath);
break;
case "css":
fileRef = document.createElement("link");
fileRef.setAttribute("rel", "stylesheet");
fileRef.setAttribute("type", "text/css");
fileRef.setAttribute("href", filePath);
break;
default:
return;
break;
}
//Load the file
if(parentBOO){
parent.document.getElementsByTagName("head")[0].appendChild(fileRef);
}else{
document.getElementsByTagName("head")[0].appendChild(fileRef);
}
}
它在FireFox和Chrome中正常工作,但是在Internet Explorer 6,7(我还没有签入8,9)中,我遇到了下一个JavaScript错误:
“无效的论点”
在这行上:
parent.document.getElementsByTagName("head")[0].appendChild(fileRef);
我想知道这是因为跨域安全性,所以我添加了这一行
在父窗口中:
"document.domain = '127.0.0.1';"
但这没有帮助。
最佳答案
我找到了解决方案。
问题是我创建的元素不在同一窗口对象上。
要修复它,我添加以下行:parent.document.CreateElement而不是:document.CreateElement
固定代码为:function LoadJSCSSFile(filePath,fileType,parentBOO){ //- var fileRef; // Get the file reference //- //Set external JavaScript/CSS file switch(fileType){ case "js": if(parentBOO){ fileRef = parent.document.createElement('script'); }else{ fileRef = document.createElement('script'); } fileRef.setAttribute("type","text/javascript"); fileRef.setAttribute("src", filePath); break; case "css": if(parentBOO){ fileRef = parent.document.createElement("link"); }else{ fileRef = document.createElement("link"); } fileRef.setAttribute("rel", "stylesheet"); fileRef.setAttribute("type", "text/css"); fileRef.setAttribute("href", filePath); break; default: return; break; } //Load the file if(parentBOO){ parent.document.getElementsByTagName("head")[0].appendChild(fileRef); }else{ document.getElementsByTagName("head")[0].appendChild(fileRef); }}
关于javascript - Internet Explorer中父窗口上的动态CSS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4012435/