【问题标题】:Cordova In app browser App Transport SecurityCordova 应用内浏览器 应用传输安全
【发布时间】:2019-03-31 13:18:27
【问题描述】:

我正在尝试从本地服务器(使用 httpd 插件)在 In App Browser 中加载内容。网页来自 https,而本地服务器正在加载当然是 http。

我正在 Iphone x IOS 12 上进行测试。使用 adobe Build

试过了:

<access origin='*' allows-arbitrary-loads-in-media='true' allows-arbitrary-loads-in-web-content='true' allows-local-networking='true' />

<edit-config target="NSAllowsArbitraryLoads" file="*-Info.plist" mode="merge">

<true />

</edit-config>

<plugin name="cordova-plugin-transport-security" source="npm" />

错误:

[blocked] The page at https://somewebpage was not allowed to run insecure content from http://127.0.0.1:8080/javascripts/somejsfile.js.

这些都不起作用。有人有什么建议吗?

【问题讨论】:

    标签: ios cordova http inappbrowser app-transport-security


    【解决方案1】:

    另一个不改变浏览器安全设置的android解决方案是使用"https://cdvfile/assets/www/cordova.js"而不是"cdvfile://localhost/assets/www/cordova.js",并将以下行添加到FileUtils.java中的remapUri方法中(在cordova中文件插件):

    uri = Uri.parse(uri.toString().replace("https://cdvfile/", "cdvfile://localhost/"));
    

    这将照常加载文件,不会导致 webview 阻止请求。

    见公关https://github.com/apache/cordova-plugin-file/pull/322

    【讨论】:

      【解决方案2】:

      这不是应用传输安全问题,而是违反混合内容政策。 解决方案:

      对于 android:通过将以下代码放入您的 cordova 插件的 pluginInitialize 方法来禁用混合内容策略:

      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                  final WebSettings settings = ((WebView)this.webView.getView()).getSettings();
            settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
              } 
      

      https://developer.android.com/reference/android/webkit/WebSettings.html#MIXED_CONTENT_ALWAYS_ALLOW)

      然后使用以下方法包含本地cordova.js:

      <script src="cdvfile://localhost/assets/www/cordova.js"></script>
      

      对于 ios:我提交了一个解决 ios 上混合内容问题的文件插件的 PR:apache/cordova-plugin-file#296 修复版本在:https://github.com/guylando/cordova-plugin-file 如果你加载远程站点 @987654323 @ 在 webview 上然后它允许使用 url 访问本地文件:https://example.com/cdvfile/bundle/www/cordova.js 而不是 cdvfile://localhost/bundle/www/cordova.js 从而解决了混合内容问题

      使用以下方法包含本地cordova.js:

      <script src="/cdvfile/bundle/www/cordova.js"></script>
      

      【讨论】:

      • 这看起来是个不错的解决方案,我会试一试,谢谢!
      • 实际上它似乎不起作用,我错过了什么吗?我包含了您的文件插件版本,在我的应用程序浏览器中,我包含了一个 js 资源 https://myhosturl/cdvfile/bundle/www/cordova.js 例如,它返回时找不到 404。
      • @Keenan35i 这是我包含的有效标签:
      • 这也仅适用于 ios。对于禁用混合内容策略后的 android 使用: 注意“assets”而不是“bundle”
      • 我在导航到远程 url 的 cordova UIWebView 中使用它。我没有从 inappbrowser 插件中使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 2016-02-13
      • 2019-09-05
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多