Jquery mobile jQueryMobile+;PhoneGap+;iOS 11:阻止尝试使用history.replaceState()更改会话历史URL

Jquery mobile jQueryMobile+;PhoneGap+;iOS 11:阻止尝试使用history.replaceState()更改会话历史URL,jquery-mobile,phonegap,Jquery Mobile,Phonegap,从iPhone OS 11.3开始,我的应用程序出现以下错误: SecurityError: Blocked attempt to use history.replaceState() to change session history URL from file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/index.html#/?phonegap

从iPhone OS 11.3开始,我的应用程序出现以下错误:

SecurityError: Blocked attempt to use history.replaceState() to change session history URL from file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/index.html#/?phonegap=true to https://myplaceonline.com/?phonegap=true. Protocols, domains, ports, usernames, and passwords must match.
url:
file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js
line #: 3 (31672)
我一直都是这样做的(这一点在Android上仍然有效):

  • 将JQM加载到一个文件中
  • 附加了一个JQM事件处理程序,它注册了一个
    pageloaded
    事件处理程序,该事件处理程序最终调用
  • loadHomepage将
    $.mobile.path.documentBase
    base
    标记的
    href
    属性设置到我的远程服务器()并调用
    $.mobile.pageContainer.pageContainer(“更改”),“/”,{allowSamePageTransition:true,transition:'none',reloadPage:true,changeHash:true})
    加载远程主页
  • 这最终会促使JQM调用replaceState,该调用失败并出现安全错误:
    
    replaceState@[本机代码]
    squash@file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js:3:31672
    go@file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js:4:322
    navigate@file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js:4:1598
    
  • 以上所有内容的目的都是为了避免我离开
    文件://
    ,因为如果我这样做,我将无法通过PhoneGap访问所有本机phone JS API。这适用于较旧版本的iOS,并继续适用于Android


    有没有其他方法可以解决新版本iOS上更严格的安全问题?或者,我发现有一些问题,比如哪种方法建议禁用历史记录,我想知道这是否是另一种解决方法,我会失去什么?

    将以下代码添加到
    mobileinit
    处理程序可以修复此问题:

    $.mobile.hashListeningEnabled = false;
    $.mobile.pushStateEnabled = false;
    $.mobile.changePage.defaults.changeHash = false;