从Cordova

时间:2017-03-21 20:45:13

标签: javascript android ios cordova post

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

我们编码使用inAppBrowser插件来启动嵌入在应用程序中的浏览器。

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

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

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

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

我用谷歌搜索了但是有太多相互矛盾的信息;会有一个响应,它的工作,然后另一个人回复它没有。让它上班也有一些警告;例如,似乎可以在默认浏览器中打开URL,但它也会在应用程序内浏览器中打开页面。这会让最终用户感到困惑。

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

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

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

2 个答案:

答案 0 :(得分:0)

您可以通过指定目标,例如。;

,使用inAppBrowser打开应用程序外部的浏览器

var linkTarget =“_ blank”; (用于桌面;已将目标编码为Android的_system。道歉。)

[EDITED]

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

这不会打开应用程序中的网页 - 在系统浏览器中打开。

如果在设备设置应用程序管理器页面中清除了浏览器默认值,则此链接将提示用户选择浏览器(我假设它使用以前设置的默认值,但您可能需要仔细检查特别是如果你正在使用人行横道

还有其他目标选项,但似乎回想起_system没有按预期工作 - 如果_blank不起作用,请试一试

即使你有一个特殊的插件,我认为没有任何直接的方式来启动浏览器做帖子;

看起来使用dataUrl可能允许你打开浏览器做一个帖子 - 如果是这样的话,那就是最干净的方法。 (请参阅以下吴的答案中的链接)[编辑]看起来不适用于Windows移动平台;见caniuse dataURIs

或者,您可以尝试将单独的html文件作为应用程序文件的一部分 - 将其加载到上面的新浏览器中(“file:// ..”除外)并让它运行一些启动javascript(可能使用查询字符串)为了控制)做这个职位,例如。通过jquery ajax调用。这种方法会出现安全问题 - 文件必须是浏览器可以访问的地方(可以将应用程序从内部www文件夹复制到那里 - 需要读/写权限)。不确定是否会有CORS问题等。如果不考虑窗口,我肯定会首先查看dataUrl。

答案 1 :(得分:0)

看起来像&#34; _blank&#34;无法在iOS上的外部浏览器中打开网址。 我试过这个:
1)安装inappbrowser插件 2)调用window.open(encodeURI(&#39; https://openclipart.org/&#39;),&#34; _blank&#34;); 当按下按钮时。
网址在应用中打开,而不是外部浏览器。

更新:
使用&#34; _system&#34;将在iOS上的Safari中打开网址,打开网址:
1)安装inappbrowser插件 2)调用cordova.InAppBrowser.open(encodeURI(&#39; https://openclipart.org/&#39;),&#34; _system&#34;);

不幸的是,这种方式只能用于发送get请求。 有人建议在loadstop事件上提交post表单,如下所示: Cordova InAppBrowser post form to url

当目标是&#34; _blank&#34;时,该方法有效,当目标是&#34; _system&#34;时,因为浏览器中的打开网址不是应用程序窗口,所以不会触发loadstop事件。