为什么onDeviceReady中的if()语句循环?

时间:2013-09-06 08:25:14

标签: javascript android cordova

在我的Phonegap Android应用中,我有这个Javascript代码:

function onDeviceready()
{
    window.plugins.webintent.getUri(function(url)
    {
            alert("window location is: " + window.location);
            if (window.location !== 'file:///android_asset/www/confirmation.html')
            {
                window.location = "file:///android_asset/www/confirmation.html";
            }
    });
}

在我看来,如果window.location不是file:///android_asset/www/confirmation.html,那么它应该转到file:///android_asset/www/confirmation.html。如果它已经在该页面上,则不会发生任何事情。

但是,正在发生的事情是它不停地重复加载file:///android_asset/www/confirmation.html

在网络上进行一些搜索表明,在Android设备的上下文中,应该使用navigator.app.loadUrl()代替window.location,但此代码仍会循环播放:

function onDeviceready()
{
    window.plugins.webintent.getUri(function(url)
    {
            alert("window location is: " + window.location);
            if (window.location !== 'file:///android_asset/www/confirmation.html')
            {
                navigator.app.loadUrl("file:///android_asset/www/confirmation.html");
            }
    });
}

当我通过file:///android_asset/www/confirmation.html代码时,如果我已经file:///android_asset/www/confirmation.html,我该如何留在onDeviceready

3 个答案:

答案 0 :(得分:4)

window.locationan object,不是字符串,因此无法进行比较。

也许试试window.location.href != 'http://....'

如果混淆来自于即使它是一个对象,你仍然可以为它分配一个字符串(以更改URL)。

答案 1 :(得分:0)

我不确定window.location将始终返回您所比较的内容。也许更好的想法是比较URL的子字符串而不是整个路径:

if (document.location.href.indexOf('onfirmation.html') > -1)
{
    navigator.app.loadUrl("file:///android_asset/www/confirmation.html");
}

另外,正如Thilo所指出的,window.location是一个对象,而不是一个字符串 - 但是一个简单的“==”而不是“===”也会在那里工作,我想:)

答案 2 :(得分:0)

function onDeviceready()
{
    window.plugins.webintent.getUri(function(url)
    {
           var activePage = $.mobile.activePage.attr("id");

    if(activePage!="confirmation")// confirmation is page id of confirmation.html page
      {

        $.mobile.changePage('confirmation.html');
        // confirmation.html is not in same folder then put '../foldername/confirmation.html'

       }
    });
}