2017-03-21 179 views
0

我们目前有一个Cordova应用程序,需要使用POST启动外部浏览器。从Cordova启动外部浏览器

我们将它编码为使用inAppBrowser插件启动嵌入到应用程序中的浏览器。

我不喜欢使用内部浏览器,因为我会被指责为在默认浏览器中呈现的网页中的任何错误,并且不会在inAppBrowser中工作。

我们如何用POST请求启动默认浏览器?

一旦浏览器启动,我们不需要在浏览器中有一个后退按钮,将用户带回我们的应用程序。

我们只关心iOS和Android。我们可以在每个平台上使用不同的解决方案。

我已经使用Google搜索,但有太多冲突的信息;将会有一个响应,它会起作用,然后另一个人回复说它没有。还有一些需要注意的问题,例如,似乎可以在默认浏览器中打开URL,但它也会将页面保留在应用内浏览器中。这会让最终用户感到困惑。

我已经创建了一个upwork.com项目,用来支付某人创建一个cordova插件,该插件专用于通过POST请求启动外部浏览器。随时评论任何预期的问题。

[编辑]以下是我用来测试在iOS上的步骤:

  1. 清除所有后台任务在iPhone
  2. 启动具有链接旨在启动外部浏览器
  3. 点击链接的应用这是为了启动外部浏览器
  4. 观察到浏览器启动
  5. 双击Home键即可显示所有正在运行的应用
  6. 如果在默认浏览器中成功运行,我应该观察原始应用程序和浏览器正在运行。
  7. 如果成功,我们还应该观察到原始应用程序未显示目标网页。这一点很重要,因为有些人可以启动默认浏览器,但原来的应用程序仍处于显示网页的状态。

回答

0

您可以通过指定目标例如在inAppBrowser中打开应用程序以外的浏览器。

var linkTarget =“_blank”;(使用桌面;已编码的目标是_SYSTEM为Android道歉。)

将帖子

<a href="#" onclick="window.open(encodeURI('https://openclipart.org/'),"_system")">openclipart.org</a>; 

这确实在应用程序无法打开网页 - 在系统浏览器中打开。

如果设备设置应用程序管理器页面中的浏览器默认值已被清除,该链接将提示用户选择他们的浏览器(我假设它以其他方式使用之前设置的默认值,尽管您可能要仔细检查如果你正在使用人行横道

还有其他的目标选择,但依稀记得_system无法按预期工作 - 给它一个尝试,如果_blank不起作用

我不认为有任何直接启动浏览器doi的方法即使你有一个特殊的插件,

看起来像使用dataUrl可能允许你打开浏览器做一个帖子 - 如果是这样的概率最干净的方法。 (请参阅下面Wu的回答中的链接)[EDIT]看起来在Windows移动平台上不起作用;见caniuse dataURIs。或者,你可以尝试一个单独的html文件作为你的应用程序文件的一部分 - 如上所述加载到一个新的浏览器(除“file:// ..”),并让它运行一些启动JavaScript(也许使用查询字符串控制)来完成这个职位,例如。通过jquery ajax调用。这种方法会存在安全问题 - 文件必须位于浏览器可以访问的地方(可以将应用程序从内部www文件夹复制 - 需要读取/写入权限)。不知道是否会有CORS问题等。如果Windows不考虑,我肯定会首先查看dataUrl。

+0

您测试过哪些平台? –

+0

有没有你在做的事情,吴没有这样做,让你的测试成功?例如,href =“#”是否有所作为? –

+0

感谢鲍勃,当我使用_system替换_blank时,它工作。 –

0

貌似“_blank”不能打开URL iOS上的外部浏览器。 我试图通过这样的:
1)安装inappbrowser插件。
2)呼叫window.open(是encodeURI( 'https://openclipart.org/'), “_blank”);按下按钮时按下 。
在应用程序中打开的URL,而不是外部浏览器。

更新:
使用 “_SYSTEM” 将在Safari中打开URL iOS上,打开网址:
1)安装inappbrowser插件。
2)调用cordova.InAppBrowser.open(是encodeURI( 'https://openclipart.org/'), “_SYSTEM”);

不幸的是这种方式才有效发送GET请求。 有人建议在loadstop事件提交后的形式是这样的: Cordova InAppBrowser post form to url

的方法工作时,目标是“_blank”,当时的目标是“_SYSTEM”,因为在浏览器不应用窗口打开URL,该loadstop事件不会被辞退了。

+0

你测试过什么平台? –

+0

您所包含的“Cordova InAppBrowser发布到网址的链接”链接有一个更进一步的答案,其中有人描述使用dataUrl发布数据 - 这不需要loadstop事件/ inAppBrowser实例。 (你可能不想清除用户的主缓存,虽然尤其是如果你使用_system) – Bob

+0

已经修改了答案。对_blank上的最初误导抱歉。 – Bob