【问题标题】:window.open not working on Android Phonegapwindow.open 在 Android Phonegap 上不起作用
【发布时间】:2014-07-10 14:54:54
【问题描述】:

我已经在互联网上搜索了几个小时,但找不到解决我的问题的方法。

我创建了一个简单的 Phonegap 应用程序,现在我想链接到外部网页。我正在运行 Cordova 3.0,这是我安装的插件列表:

org.apache.cordova.core.inappbrowser 0.2.0 "InAppBrowser"
org.apache.cordova.core.splashscreen 0.2.0 "Splashscreen"
org.apache.cordova.device 0.2.3 "Device"
org.apache.cordova.inappbrowser 0.5.0 "InAppBrowser"

这是我尝试打开链接的方式:

<a onclick="var ref = window.open('http://www.google.co.uk', '_system', 'location=yes');" id="external-link">Link</a>

在 iOS 上一切正常,但在 Android 上没有任何反应。我检查了 logcat,没有收到任何错误,没有反馈,它只是不起作用。

我也尝试过navigator.app.loadUrl,但随后我收到一条错误消息,提示“无法加载未定义的 url”

我真的希望这是一件简单的事情,但到目前为止它让我发疯,有人对我做错了什么有任何建议吗?

仅供参考:

cordova_plugins.js

cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
    {
        "file": "plugins/org.apache.cordova.core.splashscreen/www/splashscreen.js",
        "id": "org.apache.cordova.core.splashscreen.SplashScreen",
        "clobbers": [
            "navigator.splashscreen"
        ]
    },
    {
        "file": "plugins/org.apache.cordova.core.inappbrowser/www/InAppBrowser.js",
        "id": "org.apache.cordova.core.inappbrowser.InAppBrowser",
        "clobbers": [
            "window.open"
        ]
    },
    {
        "file": "plugins/org.apache.cordova.device/www/device.js",
        "id": "org.apache.cordova.device.device",
        "clobbers": [
            "device"
        ]
    },
    {
        "file": "plugins/org.apache.cordova.inappbrowser/www/inappbrowser.js",
        "id": "org.apache.cordova.inappbrowser.inappbrowser",
        "clobbers": [
            "window.open"
        ]
    },
]
});

config.xml

<widget xmlns     = "http://www.w3.org/ns/widgets"
        id        = "io.cordova.helloCordova"
        version   = "2.0.0">
    <name>Hello Cordova</name>

    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>

    <author href="http://cordova.io" email="dev@cordova.apache.org">
        Apache Cordova Team
    </author>

    <access origin="*"/>

    <content src="index.html" />

    <preference name="loglevel" value="DEBUG" />
    <!--
      <preference name="splashscreen" value="resourceName" />
      <preference name="backgroundColor" value="0xFFF" />
      <preference name="loadUrlTimeoutValue" value="20000" />
      <preference name="InAppBrowserStorageEnabled" value="true" />
      <preference name="disallowOverscroll" value="true" />
    -->

    <feature name="App">
      <param name="android-package" value="org.apache.cordova.App"/>
    </feature>
    <feature name="Geolocation">
      <param name="android-package" value="org.apache.cordova.GeoBroker"/>
    </feature>
    <feature name="Device">
      <param name="android-package" value="org.apache.cordova.Device"/>
    </feature>
    <feature name="Accelerometer">
      <param name="android-package" value="org.apache.cordova.AccelListener"/>
    </feature>
    <feature name="Compass">
      <param name="android-package" value="org.apache.cordova.CompassListener"/>
    </feature>
    <feature name="Media">
      <param name="android-package" value="org.apache.cordova.AudioHandler"/>
    </feature>
    <feature name="Camera">
      <param name="android-package" value="org.apache.cordova.CameraLauncher"/>
    </feature>
    <feature name="Contacts">
      <param name="android-package" value="org.apache.cordova.ContactManager"/>
    </feature>
    <feature name="File">
      <param name="android-package" value="org.apache.cordova.FileUtils"/>
    </feature>
    <feature name="NetworkStatus">
      <param name="android-package" value="org.apache.cordova.NetworkManager"/>
    </feature>
    <feature name="Notification">
      <param name="android-package" value="org.apache.cordova.Notification"/>
    </feature>
    <feature name="Storage">
      <param name="android-package" value="org.apache.cordova.Storage"/>
    </feature>
    <feature name="FileTransfer">
      <param name="android-package" value="org.apache.cordova.FileTransfer"/>
    </feature>
    <feature name="Capture">
      <param name="android-package" value="org.apache.cordova.Capture"/>
    </feature>
    <feature name="Battery">
      <param name="android-package" value="org.apache.cordova.BatteryListener"/>
    </feature>
    <feature name="SplashScreen">
      <param name="android-package" value="org.apache.cordova.SplashScreen"/>
    </feature>
    <feature name="Echo">
      <param name="android-package" value="org.apache.cordova.Echo"/>
    </feature>
    <feature name="Globalization">
      <param name="android-package" value="org.apache.cordova.Globalization"/>
    </feature>
    <feature name="InAppBrowser">
      <param name="android-package" value="org.apache.cordova.InAppBrowser"/>
    </feature>
    <!-- Deprecated plugins element. Remove in 3.0 -->
    <plugins>
    </plugins>
</widget>

我还尝试从 CLI 更新/重新添加 InAppBrowser 插件,但我收到一条错误消息,指出我的 Cordova 版本不支持它,我需要 3.0 版,我运行了 sudo npm update -g cordova,但不断收到之后同样的错误。

任何帮助将不胜感激!

谢谢

【问题讨论】:

  • 在帖子中我看到您使用 npm update 更新了cordova,但您是否也使用“cordova platform update android”更新了您的项目?
  • 刚刚尝试过,我得到以下“错误:命令“android”失败。确保您安装了最新的 Android SDK,并且“android”命令(在工具/文件夹内)是添加到您的路径中。”我更新了 Android SDK 并更新了我的路径,但仍然没有乐趣
  • 这有什么好运气吗?我也无法打开inappbrowser。

标签: android cordova window.open inappbrowser


【解决方案1】:

对我有帮助的(PhoneGap 3.2)是将以下内容添加到您的 config.xml 文件中:

<gap:plugin name="org.apache.cordova.inappbrowser" />

这应该添加到小部件标签中。

【讨论】:

    【解决方案2】:

    尝试添加这个:

      http://docs.google.com/viewer?url=
    

    到您尝试打开的网址的前面。

    所以它会是这样的:

      if ( device.platform == 'android' || device.platform == 'Android') ) {
           url = "http://docs.google.com/viewer?url= "+ url;
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 2023-03-15
      • 2016-11-07
      • 2012-09-09
      • 2013-05-04
      相关资源
      最近更新 更多