Динамическая CSS в родительском окне в Internet Explorer
Мне нравится добавлять динамический 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';"
Но это не поможет.
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);
}
}