ブラックベリーの携帯電話でJavaScriptを使用してDOMを操作する

ここでは、Blackberryで動作しないコードの断片(はるかに大きなコードから)です。私はul要素を動的に挿入するためにDOMを操作しています。

私はBlackberry 9700、OS
5.0でテストしています。私がやっていることは、非常に基本的なものであり、他のデスクトップブラウザでもうまく動作しません。私はブラックベリーでのJavaScriptサポートがばかげていることを知っている
– しかし、この基本的なものは?

添付されているエラーのスクリーンショットです。
JavaScriptは、関数insertBeforeが存在しないことを報告します。しかし、私はそれが存在し、私が身体に直接追加するときに動作することをテストしました

document.body.insertBefore( newNode, sibling ); 

動作しないコードは次のとおりです。

<html>
<head>
    <script type="text/javascript">
    function toggle(){
        _ul = document.getElementById('ul-list');
        if( _ul )
        {
            document.body.removeChild( _ul );
        }else
        {
            ul = document.createElement( "ul" );
            ul.setAttribute('id','ul-list');
            li = document.createElement( 'li' );
            li.appendChild( document.createTextNode("HTML") );
            ul.appendChild( li );

            li = document.createElement( 'li' );
            li.appendChild( document.createTextNode("CSS") );
            ul.appendChild( li );

            li = document.createElement( 'li' );
            li.appendChild( document.createTextNode("JavaScript") );
            ul.appendChild( li );

            li = document.createElement( 'li' );
            li.appendChild( document.createTextNode("XML") );
            ul.appendChild( li );

            parent = document.getElementById('container');
            sibling = document.getElementById('para');
            try
            {
                func = parent.insertBefore;
                if( !func )
                {
                    alert( "Function doesn't exist!" );
                }
                parent.insertBefore( ul, sibling );
            }catch( err )
            {
                alert( err );
            }


        }

    }
    </script>
</head>
<body>
    <div id ="container">

        
Display this link list as a horizontal menu: <input type="button" name="Show Now!" value ="Toggle" onClick=" toggle();"/> </div> </body> </html>

Exception from JavaScript

ベストアンサー

私はこれがBlackberry 5.0(デバイス9000と9700)のDOMの実装上のバグであることを確認します。

回避策は、要素を動的に挿入または削除する必要がある場合、要素を本体の直下に配置することです。動作するコードは次のとおりです。

<html>
    <head>
    <script type="text/javascript">
    function toggle(){
        _ul = document.getElementById('ul-list');
        if( _ul )
        {
            document.body.removeChild( _ul );
        }else
        {
            ul = document.createElement( "ul" );
            ul.setAttribute('id','ul-list');
            li = document.createElement( 'li' );
            li.appendChild( document.createTextNode("HTML") );
            ul.appendChild( li );

            li = document.createElement( 'li' );
            li.appendChild( document.createTextNode("CSS") );
            ul.appendChild( li );

            li = document.createElement( 'li' );
            li.appendChild( document.createTextNode("JavaScript") );
            ul.appendChild( li );

            li = document.createElement( 'li' );
            li.appendChild( document.createTextNode("XML") );
            ul.appendChild( li );

            parent = document.body;
            sibling = document.getElementById('para');
            try
            {
                func = parent.insertBefore;
                if( !func )
                {
                    alert( "Function doesn't exist!" );
                }
                parent.insertBefore( ul, sibling );
            }catch( err )
            {
                alert( err );
            }


        }

    }
   </script>
   
   </head>
    <body>
       
Display this link list as a horizontal menu: <input type="button" name="Show Now!" value ="Toggle" onClick=" toggle();"/> </body> </html>

変更はコンテンツがdivの「コンテナ」の子ではなくボディの直下にあることです。私はこれがWebKitレンダリングエンジンが使われているBlackberry
6.0+の問題ではないと信じています。サポートされる必要がないときまで、このバグのあるブラウザで生活する必要があります。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です