JavaScript 未在 onLoad 中加载(Android webView 浏览器问题)

标签 javascript android jquery-mobile

当我使用 Android 的 webview 时,我的 javascript 似乎根本无法加载,但在桌面浏览器上加载正常

这是我的 html 和一个 html 文件下的脚本:

<script>

function initialiseFields(){
    var name = "John Smith";
    var staffId = "9877878";
    alert( 'initialiseFields' );

    $("#list").append('<li><h3>Additional Information:</h3><div data-role="fieldcontain"><input type="text" name="claimTitle" id=/"textFieldJourneyFrom" value="" /></div></li>');

    $('#list').listview('refresh');  
}

</script>



<body onLoad="initialiseFields();">
    <div data-role="content">
        <ul class="ui-li" data-role="listview" id="list" data-inset="true"  data-scroll="true">
        </ul>
</body>

基本上尝试执行显示警报的initialiseFields并将一些字段添加到listView中。

警报和 listView 永远不会被调用/更新。

编辑:此外,无论我通过 javascript 添加什么列表项,它也不应用默认的 jquery mobile css 样式。 有什么原因吗?

另一个编辑:

解决方案是由我接受答案的人提供的,但是有一个警告。如果您正在使用日期选择器及其 Assets 。提供的 soltuons 不起作用,即由于某些奇怪的原因它没有加载你的 JS:

<link href="jQueryAssets/jquery.ui.core.min.css" rel="stylesheet" type="text/css">
<link href="jQueryAssets/jquery.ui.theme.min.css" rel="stylesheet" type="text/css">
<link href="jQueryAssets/jquery.ui.datepicker.min.css" rel="stylesheet" type="text/css">
<link href="jQueryAssets/jquery.ui.button.min.css" rel="stylesheet" type="text/css">.

另外,我通过简单地设置主题来尝试上面的代码 fragment ,它成功地将主题应用到文本、标题和背景上,但在实际字段上,它没有将其应用到输入字段

$("#list").append('<li data-theme="c"><h3>Additional Information:</h3><div data-role="fieldcontain" data-theme="c"><input type="text" name="information" id=/"textFieldInformation value="" data-theme="c"/></div></li>');

编辑2:

代码经过测试,除了输入字段的主题外,工作正常,但是,我的 JS 在 Android 设备上根本无法工作。

最佳答案

使用 jQuery Mobile 时,不要使用内联 JavaScript 函数初始化。主要是因为这个问题可能会发生。

jQuery Mobile 页面不是普通网页。与经典的 Web 开发不同,jQuery Mobile 在最初加载到 DOM 中时会重新设计整个页面的样式。这在桌面浏览器上运行速度很快,但在移动浏览器/网页 View 上运行需要时间(无论是 Android 还是 iOS)。因为这种重新设计需要时间,所以该内联函数将在 DOM 内完全加载/增强内容之前执行。这也是文档就绪不应该与 jQuery Mobile 一起使用的原因,因为它通常会在可用之前触发。

要解决此问题,您应该使用 jQuery Mobile 页面事件。它们是专门创建的,用于涵盖从初始 DOM 加载到最终页面显示的页面加载状态。

但要使其正常工作,您需要稍微更改一下 HTML。带有 data-role="content" 的 div 必须包装到带有属性 data-role="page" 的 div 中,像这样:

<body>
    <div data-role="page" id="index">    
        <div data-role="content">
            <ul class="ui-li" data-role="listview" id="list" data-inset="true"  data-scroll="true">

            </ul>
        </div>
    </div>        
</body>

要使页面事件正常工作,您的网络应用必须具有 data-role="page"div。还有您的data-role="page" div 必须有一个 id,我们将使用这个 id 来初始化您的函数。

现在要使其工作,只需像这样初始化您的函数:

$(document).on('pagebeforeshow', '#index', function(){ 
    initialiseFields();
});

如果您想了解有关页面事件的更多信息,请阅读此 ARTICLE ,坦白说,这是我的个人博客。最后一件事,您需要了解 jQuery Mobile 如何处理多个页面和 javascript 初始化,因此了解更多相关信息 HERE

您可以在这里测试:http://jsfiddle.net/qhvne/2/embedded/result/

关于JavaScript 未在 onLoad 中加载(Android webView 浏览器问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17613435/

相关文章:

java - 如何在Android应用程序中重复调用函数?

javascript - jQuery手机避免闪烁(白屏)

JQuery 移动底部导航栏又名粘性页脚

c# - 将数据绑定(bind)到asp.Net Repeater时如何调用JavaScript函数

javascript - 这是单子(monad)吗?

javascript - 提取时间(HH :MM) from moment timezone conversion

javascript - 使用 serializeArray() 访问自定义属性

javascript - 如何使用 JavaScript 从某些 html 标签中删除文本

android - 你如何提示用户设置默认家庭应用程序

android - 弹出后堆栈后,我的 fragment 没有被垃圾收集