在Blackberry手机上使用JavaScript操作DOM

时间:2011-11-13 10:54:43

标签: javascript dom blackberry browser

这是一段代码片段(来自更大的代码),在Blackberry中不起作用。我正在操纵DOM以动态插入ul元素。

我正在测试Blackberry 9700,OS 5.0。我正在做的是非常基本的,没有脑子和其他桌面浏览器。我知道Blackberry上的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>
<style type="text/css">

</style>
</head>
<body>
    <div id ="container">

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

Exception from JavaScript

1 个答案:

答案 0 :(得分:0)

我确认这是在Blackberry 5.0中实现DOM的错误(在设备9000和9700上)。

如果必须动态插入或移除元素,则解决方法是将元素直接放在正文下。有效的代码是:

<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>
   <style type="text/css">

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

更改是内容直接在body下,而不是div“container”的子项。我相信这不是使用WebKit渲染引擎的Blackberry 6.0+中的问题。需要与这个有缺陷的浏览器一起使用,直到它们不被支持为止。