0

ウィンドウに動的 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';"

しかし、それは助けにはなりません

4

1 に答える 1

0

私は解決策を見つけました。問題は、同じウィンドウオブジェクト上にない要素を作成することでした。これを修正するには、document.CreateElementの代わりにparent.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);
    }
}

于 2010-10-25T08:59:25.673 に答える