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