当我使用 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 。
关于JavaScript 未在 onLoad 中加载(Android webView 浏览器问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17613435/