29

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例外:INVALID_CHARACTER_ERR(5)

上記のコードは標準に準拠していませんか。この問題の修正は何ですか?

4

6 に答える 6

29

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

于 2011-03-17T19:24:29.683 に答える
13

jQuery.bgiframe.js の場合、間違った IE6 テストを修正するためのより良い解決策でしょうか?

これを置き換えるとどうなりますか:

if($.browser.msie&&/6.0/.test(navigator.userAgent)

このようなもので:

if ($.browser.msie && $.browser.version=="6.0")
于 2011-04-13T10:14:04.040 に答える
7

jquery.bgiframe.js の場合:

バージョン 1.1.3 pre をダウンロードしました

https://github.com/brandonaaron/bgiframe/blob/master/jquery.bgiframe.js

これで問題は解決しました。

于 2011-06-21T13:48:26.953 に答える
0

このエラーは、名前空間を使用しない場合に、標準の JavaScript 関数名を独自の関数名として誤って使用した場合に発生する可能性があります。たとえば、「属性」という概念があり、それらの新しいものを作成する新しい関数を試してみたかった:

<button onclick="createAttribute('Pony')">Foo</button>
<button onclick="createAttribute('Magical pony')">Bar</button>
<script type="text/javascript">
    function createAttribute(name) { alert(name); } 
</script>
  • 「Foo」をクリックしても何も表示されません
  • Foo をクリックするとINVALID_CHARACTER_ERR (5)、またはInvalidCharacterError: DOM Exception 5
  • 開発コンソールを開いて実行createAttribute('Django')すると、アラートが表示されます

何が起こっているかというと、ボタンが呼び出さdocument.createAttribute()れ、開発コンソールが宣言した関数を呼び出しています。

解決策:別の関数名を使用するか、名前空間を使用してください。

于 2013-04-12T08:17:52.497 に答える
-6

これは、jquery のjquery.bgiframe.jsのソリューションです。

if ( $.browser.msie && /9.0/.test(navigator.userAgent) ) {
                var iframe = document.createElement("iframe");
                iframe.setAttribute("class", "bgiframe");
                iframe.setAttribute("frameborder", "0");
                iframe.setAttribute("style", "display:block;position:absolute;z-index:-1;filter:Alpha(Opacity=\'0\');top:expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\');left:expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\');width:expression(this.parentNode.offsetWidth+\'px\');height:expression(this.parentNode.offsetHeight+\'px\');");
                this.insertBefore( iframe, this.firstChild );
            } else {
                this.insertBefore( document.createElement(html), this.firstChild );
            }
于 2011-04-09T12:03:03.867 に答える