我jQuery Mobile
在一个运行在UIWebView
. 该应用程序是编写的,Monotouch
并具有多个选项卡,其中一个选项卡显示 web 视图中的html5
内容。jQuery Mobile
允许html5
内容与应用程序的本机部分具有一致的外观和感觉。我正在尝试构建html5
使用jQuery Mobile
自定义选择菜单的功能,换句话说,选择data-native-menu
属性设置为false
,在这里我遇到了一个奇怪的问题。我已将问题提炼为一个简单的示例;这是代码:
<body>
<div data-role="page" data-theme="b" id="forms">
<div data-role="content">
<select id="test" data-native-menu="false">
<option value="abc">ABC</option>
<option value="def">DEF</option>
<option value="ghi">GHI</option>
<option value="jkl">JKL</option>
<option value="mno">MNO</option>
<option value="pqr">PQR</option>
<option value="abc1">ABC</option>
<option value="def1">DEF</option>
<option value="ghi1">GHI</option>
<option value="jkl1">JKL</option>
<option value="mno1">MNO</option>
<option value="pqr1">PQR</option>
<option value="abc2">ABC</option>
<option value="def2">DEF</option>
<option value="ghi2">GHI</option>
<option value="jkl2">JKL</option>
<option value="mno2">MNO</option>
<option value="pqr2">PQR</option>
</select>
</div> <!--content-->
</div> <!-- page-->
</body>
当我在其中运行此代码Firefox
或Safari
它工作正常时。此外,如果我在其Mobile Safari
上运行它iPad
也可以正常工作。但是,当我UIWebView
在我的应用程序中运行这个时,弹出窗口只显示选择且显示覆盖值少量项目时正确显示并关闭。相反,当显示全屏弹出窗口时,关闭弹出窗口时会出错。因此,例如,使用我上面粘贴的代码,如果iPad
在portrait mode
. 但是如果我打开iPad
应用程序landscape mode
并单击选择,那么覆盖的项目太多,而是会显示全屏弹出窗口。然后,当我尝试关闭此全屏弹出窗口时,将发生以下两种情况之一:
1)第一次加载页面时,弹出窗口根本不会关闭。它根本不会响应任何触摸事件。
2)如果我在 webview 中重新加载页面内容并重试,现在当我尝试关闭弹出窗口时,整个UIWebView将消失。这种情况将在页面的第二次和每次后续加载时发生。
奇怪的是,当我在调试模式下运行应用程序时,当我尝试从弹出窗口中选择一个项目或单击X关闭它时,我没有看到任何异常抛出。webview 就消失了。我可以说 webview 已经消失了,因为我UITabBarController
有一个背景图像显示在每个选项卡上,除了在它所在的选项卡上UIWebView
,因为 webview 覆盖了此选项卡上的背景图像。当我尝试关闭弹出窗口时,背景图像突然出现在原本为空的屏幕上......这意味着 webview 现在已经消失了。
我真的需要能够在我的html5
内容中使用自定义选择菜单,所以我希望其他人以前遇到过这种情况并且知道这里发生了什么。那么,有谁知道是什么导致了这种奇怪的行为,UIWebView
或者知道这个问题的解决方法?
我iPad
正在运行的iOS
版本5.0.1 (9A405)
和jQuery Mobile
我尝试过的版本是alpha 4.1
和1.1.0
. 这两个版本的jQuery Mobile
. iPad
如果需要有关我的或开发设置的其他信息,请告诉我。
更新:
请忽略我上面所说的关于 UIWebView 消失的内容。这实际上并没有发生。事实上,webview 中发生了异常,并且重定向到了嵌入在应用程序包中的错误 html 页面。此错误屏幕具有与 上相同的背景图像UITabBarController
,因此我得出了错误的结论。所以,我现在知道 webview 中发生了一些异常,但它仍然非常多!:) 当我知道更多时,我会发布更新。
更新 2:
我现在知道出了什么问题,尽管我还不知道如何解决它。这就是正在发生的事情:单击弹出窗口时,jQuery Mobile
正在添加#&ui-state=dialog
到 url。在其他浏览器中,此更改会反映在浏览历史记录中,因此通过back
对浏览历史记录执行的操作来关闭弹出窗口。在我的 UIWebView 的情况下,对 url 的更改没有反映在历史记录中,因此单击关闭要么什么都不做(历史记录为空),要么返回太远(到一个预加载屏幕,其中只有在实际内容已加载)。