Javascript 为什么调用DOM历史API会导致cordova无法在Android应用程序中加载图像?

Javascript 为什么调用DOM历史API会导致cordova无法在Android应用程序中加载图像?,javascript,html,cordova,dom,Javascript,Html,Cordova,Dom,我正在使用cordova从一个没有任何框架的SPA web应用程序创建一个android应用程序,但是没有一个图像标签在android中工作。都无法获取源属性;但是,如果在css中使用相同的路径作为URL属性的值,则该路径也会起作用。看来这条路是对的。这些图像本地存储在www/img文件夹中 因为这是一个SPA应用程序,所以我使用HTML5历史api来处理应用程序中的后退按钮功能。我发现在调用history API之前,图像标记可以正常工作,但之后图像标记将无法工作 对历史API的调用: fun

我正在使用cordova从一个没有任何框架的SPA web应用程序创建一个android应用程序,但是没有一个图像标签在android中工作。都无法获取源属性;但是,如果在css中使用相同的路径作为URL属性的值,则该路径也会起作用。看来这条路是对的。这些图像本地存储在www/img文件夹中

因为这是一个SPA应用程序,所以我使用HTML5历史api来处理应用程序中的后退按钮功能。我发现在调用history API之前,图像标记可以正常工作,但之后图像标记将无法工作

对历史API的调用:

function renderPage(route, back) {
  if (!back) {
    window.history.pushState({}, route, window.location.origin + route);
  }

window.onpopstate = () => {
  renderPage(window.location.pathname, true);
};
禁用上述代码段将导致图像标记正常工作。浏览器中不会出现此问题

考虑一下应用程序的安全性

因此,请完整引用以下内容-就我所知,这里的原始帖子 了解整个ATS(应用程序传输安全-iOS 9)的事情 区域28中推荐的方法不应是您正在使用的方法 在应用程序内部

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key><true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
这将允许所有对每个域的外部请求,而这显然不是您应该使用的方式。我认为你应该 在info.plist中定义一个新代码,并将此代码添加到其中(以 编辑info.plist您可以使用普通的文本编辑器,如sublime 文本等):

NSAppTransportSecurity
NSExceptionDomains
domain.tld
n包括多个域
NSTemporary ExceptionalLowsInSecureHttpLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1
这将只允许对指定域的请求。这个 所描述的方式是苹果公司的方式。 正如你在屏幕截图上看到的,这是苹果希望用户采用的方式 使用它

如果您没有指定任何内容,您将获得

无法加载网页,错误为:无法加载资源 因为应用程序传输安全策略要求使用安全的 连接

所以,改变它,错误就消失了


使用绝对路径并使用cordova文件插件获取根似乎可以解决问题

图像的路径是相对的还是绝对的?路径是相对的。您需要绝对路径,路径正在更改,因此图像路径应该更改。使用cordova文件插件,这似乎可以解决问题。谢谢
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>domain.tld</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
        </dict>
    </dict>