在webview中打开网址 - phonegap

时间:2016-01-29 17:12:34

标签: android cordova webview phonegap-plugins phonegap-build

我想知道如何在嵌入webview的app环境中打开网址。目前这个演示将在外部浏览器中打开一个新选项卡,因此,不是我所期望的。我正在使用google.com进行测试。

总结,我正在寻找功能演示。

<?xml version="1.0" encoding="UTF-8"?>

<!-- config.xml reference: https://build.phonegap.com/docs/config-xml -->
<widget xmlns     = "http://www.w3.org/ns/widgets"
        xmlns:gap = "http://phonegap.com/ns/1.0"
        xmlns:android = "http://schemas.android.com/apk/res/android"
        id        = "com.xxx.xxxxx"
        version   = "1.0.0">

    <preference name="stay-in-webview" value="true" />

    <access origin="*" browserOnly="true" subdomains="true" />

    <content src="index.html" />

    <allow-navigation href="https://google.com/*" />

    <gap:plugin name="cordova-plugin-whitelist" source="npm" version="~1" />
    <gap:plugin name="org.apache.cordova.inappbrowser" />
    <gap:plugin name="org.apache.cordova.splashscreen" />

    <preference name="phonegap-version"           value="cli-5.4.1" />
    <preference name="permissions"                value="none"/>
    <preference name="target-device"              value="universal"/>
    <preference name="fullscreen"                 value="true"/>

</widget>
<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="css/index.css" />
    </head>
    <body>
        <div>
            <script type="text/javascript" charset="utf-8">
                document.addEventListener("deviceready", onDeviceReady, false);

                function onDeviceReady() {
                    window.location.href = 'https://google.com';
                }
            </script>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
    </body>
</html>

更新: 完整的xml文件: https://codeshare.io/Vw3Fl

6 个答案:

答案 0 :(得分:19)

尝试:

window.open('https://google.com', '_self ', 'location=yes');

而不是:

window.location.href = 'https://google.com';

这将使用InAppBrowser,并使用_self作为目标。

答案 1 :(得分:7)

您必须在config.xml上添加此行以允许导航到外部网址

<allow-navigation href="*" />

这将允许导航到任何外部网址,如果您只是想允许导航到谷歌然后添加此行

<allow-navigation href="https://google.com" /> 

您可以查看文档的其余部分on the plugin page

https://github.com/apache/cordova-plugin-whitelist

答案 2 :(得分:1)

对于那些在使用Phonegap 6.3.1时遇到此问题的人,您应该正确地将网址列入白名单并使用cordova-plugin-inappbrowser plugin

继续阅读以了解如何执行此操作。

首先,确保您已将要打开的网址列入白名单。您可以将它们添加到项目根目录下config.xml文件中的<access>标记,<allow-intent>标记和allow-navigation标记的href中。有事说谎:

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.phonegap.helloworld" version="1.0.0"
        xmlns="http://www.w3.org/ns/widgets"
        xmlns:gap="http://phonegap.com/ns/1.0">

    ...

    <access origin="*" />
    <allow-intent href="*" />
    <allow-navigation href="*" />

    ...

</widget>

(注意:&#34; *&#34;在上面的href中允许打开任何url / path。在生产中,你可能想限制到某些url / path)

接下来,在index.html文件中,添加以下javascript:

<script type="text/javascript">
    document.addEventListener('deviceready', function() {
        var url = 'https://www.google.com' // change to whatever you want
        cordova.InAppBrowser.open(url, '_self', 'location=no');
    }, false)
</script>

此脚本使用cordova-plugin-inappbrowser插件,如果您使用标准Phonegap模板生成应用程序,则该插件应已包含在您的config.xml文件中。

脚本等待设备准备就绪,然后使用cordova-plugin-inappbrowser plugin打开给定的URL。 '_self'参数表示它在Phonegap webview中打开页面,'location=no'表示没有地址栏。有关其他参数选项,请参阅cordova-plugin-inappbrowser插件的文档(上面的链接)。

最后,要在适当的模拟器中测试应用程序(假设您已安装Phonegap CLI),请运行以下命令:

phonegap run ios --verbose --stack-trace
phonegap run android --verbose --stack-trace

答案 3 :(得分:0)

您可能需要将以下内容添加到phonegap xml文件中:

<?xml version="1.0" encoding="UTF-8"?>
<phonegap>
    <access origin="https://abcx.com" subdomains="true" />
</phonegap>

答案 4 :(得分:0)

在手机屏幕应用程序中打开系统浏览器页面的一种非常简单的方法是在iframe中呈现该页面。

<iframe src="http://www.google.com></iframe>

您可以使用dom update更改iframe中的网址。

这将加载到本机系统浏览器的页面中。

答案 5 :(得分:0)

通过在项目目录中键入这些命令来安装以下插件

phonegap plugin add cordova-plugin-whitelist
phonegap prepare

然后在index.html中添加以下标记

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' gap:; style-src 'self' 'unsafe-inline'; media-src *" />
<style>
*{
    margin: 0px;
    padding: 0px;
 } body {width:100%;height:100%;margin:0;overflow:hidden;background-
 color:#252525;}
 #my_iframe{
  border: 0px;
  height: 100vh;
  width: 100%;
  }
  </style>
<title>ProjectName</title>
</head>

<body>
<iframe src="PUT_HERE_YOUR_PROJECT_URL" id="my_iframe" frameborder="0" width="100%" height="100%" >
</iframe>   
</body>

</html>