Javascript 从Cordova启动外部浏览器
我们目前有一个Cordova应用程序,需要启动带有POST的外部浏览器 我们已经将其编码为使用inAppBrowser插件启动嵌入应用程序中的浏览器 我不喜欢使用内部浏览器,因为我会被指责在默认浏览器中呈现的网页中有任何错误,并且在inAppBrowser中不起作用 如何使用POST请求启动默认浏览器 一旦浏览器启动,我们不需要在浏览器中有一个后退按钮,它会将用户带回我们的应用程序 我们只担心iOS和Android。我们可以在每个平台上使用不同的解决方案 我在谷歌上搜索过,但有太多相互矛盾的信息;将有一个响应,它的工作,然后另一个人回答说,它没有。让它发挥作用也有一些警告;例如,似乎可以在默认浏览器中打开URL,但也可以在应用程序内浏览器中打开页面。这会让最终用户感到困惑 [编辑]我创建了一个upwork.com项目,付钱给某人创建一个cordova插件,专门用于通过POST请求启动外部浏览器。请随意评论这样做的任何预期问题 [编辑]以下是我在iOS上测试的步骤:Javascript 从Cordova启动外部浏览器,javascript,android,ios,cordova,post,Javascript,Android,Ios,Cordova,Post,我们目前有一个Cordova应用程序,需要启动带有POST的外部浏览器 我们已经将其编码为使用inAppBrowser插件启动嵌入应用程序中的浏览器 我不喜欢使用内部浏览器,因为我会被指责在默认浏览器中呈现的网页中有任何错误,并且在inAppBrowser中不起作用 如何使用POST请求启动默认浏览器 一旦浏览器启动,我们不需要在浏览器中有一个后退按钮,它会将用户带回我们的应用程序 我们只担心iOS和Android。我们可以在每个平台上使用不同的解决方案 我在谷歌上搜索过,但有太多相互矛盾的信息
通过指定目标,您可以使用inAppBrowser在应用程序外部打开浏览器,例如: var linkTarget=“_blank”;(用于桌面;已将目标编码为Android系统。抱歉。) [已编辑]
<a href="#" onclick="window.open(encodeURI('https://openclipart.org/'),"_system")">openclipart.org</a>;
;
这不会在应用程序中打开网页-在系统浏览器中打开
如果在设备设置应用程序管理器页面中清除了浏览器默认设置,则此链接将提示用户选择浏览器(我假设它使用先前设置的默认设置,但您可能需要再次检查,尤其是在使用人行横道时)
还有其他目标选项,但似乎回忆起系统未按预期工作-如果blank不工作,请尝试一下
我认为,即使你有一个特殊的插件,也没有任何直接的方式来启动一个做文章的浏览器
看起来使用dataUrl可能允许您打开浏览器进行post-如果是这样的话,可能是最干净的方法。(见下面吴回答中的链接)[编辑]看起来在Windows mobile平台上不起作用;看
或者,您可以尝试将一个单独的html文件作为应用程序文件的一部分-如上所述将其加载到新浏览器中(除了“file://..)并让它运行一些启动javascript(可能使用querystring进行控制)来执行post,例如通过jQueryAjax调用。此方法将存在安全问题-文件必须位于浏览器可以访问的位置(可以让应用程序从内部www文件夹将其复制到该位置-需要读/写权限)。不确定是否会出现CORS问题等。如果不考虑windows,我肯定会首先查看dataUrl。看起来“\u blank”无法在iOS上的外部浏览器中打开url。
我试过这个:1) 安装inappbrowser插件。
2) 调用window.open(encodeURI(“”),“_blank”); 当按下按钮时。
url在应用程序中打开,而不是在外部浏览器中打开。
更新:
使用“\u系统”将在iOS上的Safari中打开url,以打开url:
1) 安装inappbrowser插件。
2) 调用cordova.InAppBrowser.open(encodeURI(“”),“\u系统”)
不幸的是,这种方法只能用于发送get请求。 有些人建议在loadstop事件中提交post表单,如下所示:
当目标为“\u blank”,当目标为“\u system”时,该方法起作用,因为在浏览器中打开的url不是应用程序窗口,所以不会触发loadstop事件 您在什么平台上进行了测试?您包含的“Cordova InAppBrowser post form to url”链接有一个更深入的答案,其中有人描述了使用dataUrl发布数据-这不需要loadstop事件/InAppBrowser实例。(您可能不想按说明清除用户的主缓存,尤其是在您使用_系统的情况下)再次修改了答案。对于最初在_blank上出现的错误表示歉意。您在什么平台上进行了测试?您正在做的事情中是否有吴没有做的事情使您的测试成功?例如,href=“#”有什么不同吗?谢谢Bob,当我使用_systemreplace _blank时,它是有效的。不幸的是,这种方法只有在发送get请求时才有效。