IE8で使用されていた次のJSの部分は、現在IE9で失敗しています。
document.createElement('<iframe id="yui-history-iframe" src="../../images/defaults/transparent-pixel.gif" style="position:absolute;top:0;left:0;width:1px;height:1px;visibility:hidden;"></iframe>');
次の例外が表示されます:SCRIPT5022:DOM Exception:INVALID_CHARACTER_ERR(5)
上記のコードは標準に準拠していませんか?この問題の修正は何ですか?
CreateElementのAPIは、コンストラクターが要素の名前を指定するstring
を必要とすることを指定します。 IE9はより厳密に標準に従っているようです。次のコードを使用して、同じことを実行できます。
var iframe = document.createElement("iframe");
iframe.setAttribute("id", "yui-history-iframe");
iframe.setAttribute("src", "../../images/defaults/transparent-pixel.gif");
iframe.setAttribute("style", "position:absolute;top:0;left:0;width:1px;height:1px;visibility:hidden;");
http://msdn.Microsoft.com/en-us/library/ms536389(v = vs.85).aspx
JQuery.bgiframe.jsの場合、間違ったIE6テストを修正するより良い解決策でしょうか?
これを置き換えるのはどうですか:
if($.browser.msie&&/6.0/.test(navigator.userAgent)
このようなもので:
if ($.browser.msie && $.browser.version=="6.0")
Jquery.bgiframe.jsの場合:
バージョン1.1.3を事前にダウンロードしました
https://github.com/brandonaaron/bgiframe/blob/master/jquery.bgiframe.js
これで問題は解決しました。
このエラーは、名前空間を使用しない場合、誤って標準のJavaScript関数名を独自の関数名として使用すると発生する可能性があります。たとえば、「属性」という概念があり、それらの新しい関数を作成する新しい関数を試してみました。
_<button onclick="createAttribute('Pony')">Foo</button>
<button onclick="createAttribute('Magical pony')">Bar</button>
<script type="text/javascript">
function createAttribute(name) { alert(name); }
</script>
_
INVALID_CHARACTER_ERR (5)
または_InvalidCharacterError: DOM Exception 5
_が表示されますcreateAttribute('Django')
を実行すると、アラートが表示されます起こっているのは、ボタンが document.createAttribute()
を呼び出しており、開発者コンソールが宣言した関数を呼び出していることです。
解決策:別の関数名を使用するか、名前空間を使用します。
パフォーマンスを少し犠牲にして、外部ライブラリを使用できる場合は、以下を使用することをお勧めします。
プロトタイプJS
var el = new Element('iframe', {
id: "<your id here>",
src: "<your source here>",
style: "<your style here>"
});
jQuery
var el = jQuery('<iframe>', {
id: '<your id here>',
src: "<your source here>",
style: "<your style here>"
})[0];
これにより、ブラウザー間のすべての不整合が処理され、かなりきれいになります:-)
注:これはテストされていない擬似コードです。詳細については、 プロトタイプJS および jQuery の公式ドキュメントページを参照してください。