以下代码
<a data-rel="dialog" href="/Client/Events?ID=c2a7a58e-bef1-4574-987f-4adfc2c3ecc1">
<div class="ui-li-aside"> 1 </div>
<div>
Alejandra Garcia
</div>
</a>
这适用于我的电脑浏览器,也适用于Windows手机浏览器。但是在iphone或ipad浏览器上不起作用。看起来链接被点击但我看不到对话框。无论是超级延迟还是不工作。
页面的响应和加载时间非常快,可以在常规桌面浏览器上无缝运行。它是一个非常小的页面加载。
我应该尝试让它起作用的任何提示吗?
答案 0 :(得分:4)
我怀疑它与您正在使用的网址有关,JQM不了解这样的链接:
/Client/Events/StubCheckIn/innasf?stubID=c807321b-5381-4338-adef-9e676374d85d
没有文件结尾,没有标签,我一直在用简单的[?para = meter](https://github.com/jquery/jquery-mobile/issues/4253)链接和JQM处理它几天。
我解决“在ipad上没有发生任何事情”的最简单方法是通过相应的JQM小部件启用iPad调试器和console.log-ging。在你的情况下从这里开始(关于3582行):
// click routing - direct to HTTP or Ajax, accordingly
$( document ).bind( "click", function( event ) {
// your first flag
console.log("flag 1 - click detected")
if( !$.mobile.linkBindingEnabled ){
return;
}
var link = findClosestLink( event.target ), $link = $( link ), httpCleanup;
if ( !link || event.which > 1 || !$link.jqmHijackable().length ) {
// your second flag
console.log("flag 2 - not a link?!?)
return;
}
...
通过点击处理程序一直这样做,并确保标记所有返回,这会因各种原因而终止该功能。
当你完成点击处理程序(不那么长)时,你会看到它触发一个changePage,所以跟着它到changePage处理程序并继续标记。这应该从第(#3232)行开始:
// Show a specific page in the page container.
$.mobile.changePage = function( toPage, options ) {
console.log("flag x - made it to changepage");
...
一直浏览 changepage ,然后按照 transitionpages (我认为不会这样)和 $ .mobile.loadPage (关于#2931,更有可能)。
一旦你标记了所有东西(在加载后停止!:-),在浏览器和ipad上重新加载页面,看看ipad在浏览器中的失败位置。可能需要一个小时,但您将很好地了解JQM之后的工作方式: - )
另一个原因可能是pushstate处理程序(约#3781)。如果浏览器支持pushstate(桌面是,iOS ...不确定,iOS3否)你可以制作漂亮的网址,所以如果你从你的页面出发:
root.com/client/events/checkin/innasf
到对话框
http://root.com/Client/Events/StubCheckIn/innasf?stubID=96e63aee-1465-4ecd-ad35-123f240d09ff
您的浏览器仍会显示页面网址 - 可能是因为您将 changehash 设置为false(保留了网址)。这个(我相信)是由pushstate处理程序完成的,因为你的URL应该是:
root.com/client/events/checkin/innasf#http://root.com/Client/Events/StubCheckIn/innasf?stubID=96e63aee-1465-4ecd-ad35-123f240d09ff&some-dialog-ending
这将是非pushstate设备将尝试解析的网址(例如我的iPad ios3.3),它也无法正常工作。
我的猜测是,当JQM解析URL时,您的链接会在click或changepage处理程序中的某处失败。
如果您标记自己,请告诉我浏览器和iOS之间的区别。然后我们可以看看这是否可以解决。
答案 1 :(得分:2)
好的,我在iOS Safari的Debug控制台下检查了网站。似乎Safari阻止了对话框加载的跨域请求(在此处引用:Unsafe JavaScript attempt to access frame warning in Safari) - 这是调试控制台显示的警告。根据我的研究,似乎Safari比其他浏览器更严格。