我在Android上的handleOpenURL实现不起作用,我错过了什么?

时间:2012-10-25 14:55:03

标签: javascript android cordova

我正在开发一个PhoneGap项目,我正在尝试实现一个简单的机制来调用handleOpenURL方法(根据此示例:http://goo.gl/FKmFL),当URL传递给应用程序时。可悲的是,我遇到了一些绊脚石。问题有两个:

首先我对sendJavascript的调用似乎根本不起作用 - 没有调用JavaScript,没有错误,没有任何错误。我已经读过这个函数在活动开始时没有用,但似乎没有其他人遇到麻烦...

其次当我拨打loadUrl时(请参阅下面的示例),我收到如下错误消息:

ReferenceError: Can't find variable: handleOpenURL at undefined:1

以下是我的Java代码:

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    super.loadUrl("file:///android_asset/www/index.html");

    final Intent intent = getIntent();

    Log.d("myApp","Start");
    Log.d("myApp","Data string: " + intent.getDataString());

    if(intent.getDataString() != "" && intent.getDataString() != null) {

        Log.d("myApp","Calling handleOpenURL");         
        String url = intent.getDataString();
        // this.sendJavascript("handleOpenURL(\"" + url +"\");");
        super.loadUrl("javascript:handleOpenURL('"+url+"')");
    }
}

以下是我的JavaScript代码:

<script>    
    function handleOpenURL(url) {
    $("body").append("<h2>Url:</h2>");
    $("body").append("<p>"+url+"</p>");
}
</script>

非常感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:1)

我在Android w / DroidGap上确实存在这个问题...

第一次启动应用程序时,DroidGap子类方法可以看到intent数据,但是无法将数据放入Javascript执行环境中以使其可用。

我尝试了一个sendJavascript调用(如上所示),但我怀疑这个失败是因为页面还没有完成加载而onDeviceReady还没有被激活。

我也尝试在CookieManager中设置一个cookie,但是无法让它工作。

将数据附加到查询字符串,即 super.loadURL(“file:// ...”+“#”+ url)

然后在onDeviceReady事件处理程序中解析location.href是最好的。它在第一次启动应用程序时不起作用,但是在应用程序关闭+杀死然后启动之后它会起作用。

太糟糕的InvokeString在Android上不起作用,并且已被弃用。

答案 1 :(得分:-1)

首先,一个小问题,你对'intent.getDataString()!=“”'的检查是不可靠的。它需要是'!intent.getDataString()。equals(“”)'。

我没有看到对“setJavaScriptEnabled(true)”的调用,这似乎是让它工作的最低要求。

您可以尝试为这类事情找到工作教程,然后开始包含与您的应用程序相关的元素。