【问题标题】:How do you load an external web app with Cordova 4.0?如何使用 Cordova 4.0 加载外部 Web 应用程序?
【发布时间】:2016-06-03 20:59:56
【问题描述】:

我们使用 Cordova ~3.9 通过 config.xml 文件中的 <content> 标记加载外部 Web 应用程序,如下所示: <content src="http://10.1.1.1:3000"/>

更新到 Cordova 4.0+ 后,我们无法再通过此方法加载外部应用程序;该应用程序不加载任何内容。

我查看了 Cordova 4.0 的白名单更改,并尝试使用 <access><allow-intent><allow-navigation> 标签来允许访问外部源但没有成功。

功能差异: 3.9 - 加载外部 url 作为 Cordova 应用程序的源 4.0+ - 没有加载页面,应用显示空白屏幕

如何使用 Cordova 4.0+ 加载外部站点?

谢谢!

【问题讨论】:

    标签: ios cordova


    【解决方案1】:

    Apache Cordova 中的安全策略与 Cordova 5.0 相比发生了巨大变化,不允许您在没有白名单插件的情况下访问外部 URL。

    据我所知,如果您打算在 Cordova 应用程序中访问外部托管的 Web 应用程序,最好查看 hosted webapp plugin

    该插件通过提供描述网站的清单,可以在 Cordova 应用程序内使用网站中托管的内容。它还可以让您使用 Cordova 插件的功能。

    【讨论】:

      【解决方案2】:

      我这样做了,但是我在项目加载的 index.html 文件中加载了网站

      top.location.href = "https://mywebapp.com";
      

      我正在使用 Phonegap 5.5.2。在 config.xml 中,我有

      <access origin="*" />
      <allow-navigation href="*" />
      <allow-intent href="http://*/*" />
      <allow-intent href="https://*/*" />
      <allow-intent href="tel:*" />
      <allow-intent href="sms:*" />
      <allow-intent href="mailto:*" />
      <allow-intent href="geo:*" />
      

      在 Mac 上的 plist 中,我将 Allow Arbitrary Loads 设置为 YES。

      【讨论】:

        【解决方案3】:

        我刚刚对此进行了测试,它适用于 iOS Cordova 4.2.1(截至 2016 年 9 月的当前版本):

        <allow-navigation href="[your url, wildcards, etc]" />
        

        我把它放在 config.xml 的 iOS 平台部分。

        我猜您遇到的问题是自您发布以来已通过更新版本的 iOS Cordova 修复的问题。

        多年来,人们一直在说“不要以这种方式使用 Cordova”,但多年来他们一直错了。它工作得很好,只要你遵循他们的设计和可用性指南,Apple 不会介意。

        【讨论】:

          【解决方案4】:

          选项 1:

          你可以做一件事,在 www/index.html 里面放一个打开 http://10.1.1.1:3000 的 iframe

          <iframe src="http://10.1.1.1:3000">
             <p>Your device does not support iframes.</p>
          </iframe>
          

          应用样式以获得所需的高度、宽度和其他选项。

          选项 2:

          使用inappbrowser插件。

          var ref = cordova.InAppBrowser.open('http://10.1.1.1:3000', '_blank', 'location=yes');
          

          their docs查看更多选项

          【讨论】:

          • 请记住,当您使用 InAppBrowser 时,远程站点将无法利用任何 Cordova 插件。我也倾向于避免使用iframes,因为它们在移动设备上的表现有些糟糕。 github.com/phonegap/phonegap/wiki/iFrame-Usage
          【解决方案5】:

          这不是使用 Cordova 的推荐方式。见General Tips

          在打开任何外部网站的链接时使用 InAppBrowser。这比将域名列入白名单并将内容直接包含在您的应用程序中要安全得多,因为 InAppBrowser 将使用本机浏览器的安全功能,并且不会让网站访问您的 Cordova 环境。即使您信任第三方网站并将其直接包含在您的应用程序中,该第三方网站也可能链接到恶意网页内容。

          config.xml 中的 &lt;content&gt;node 应该是 Cordova 首次加载时加载的默认 HTML 页面。不是IP地址。它应该引用您的 www 文件夹中的 HTML 页面。

          【讨论】:

          • 所以你是说 Cordova 不再支持加载远程 HTML 页面作为应用程序的基础?这个功能曾经可以工作,我很困惑为什么不再支持它。
          • 我从未说过它不受支持。使用iframe 可能有一种破解方法可以绕过它,但根据Cordova 文档,内容应该从/www 的设备本地提供。执行此开发人员尝试实现的应用程序通常会被拒绝,因为它的用户体验很差。如果您尝试在 Cordova 中加载远程站点,为什么不直接创建一个移动网站呢?
          • @johnborges 您刚才所说的几乎所有内容都是不正确的。您不需要使用 iframe 进行破解。 Cordova 可以很好地与外部网站配合使用。加载外部页面的应用程序被广泛使用(我自己已经发布了几个),除非您违反他们的 UI 指南,否则 Apple 不会拒绝它们。在拥有这样的应用程序时,您并不总是有选择的余地。为什么您会假设允许使用 stackoverflow 的开发人员做出业务决策?正如我在回答中所说,我认为这是以前版本的 Cordova 中的一个错误,因为当前版本可以正常工作。
          猜你喜欢
          • 2023-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-29
          • 2015-04-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多