从Cordova在InAppBrowser上定义用户代理

时间:2013-04-29 08:54:09

标签: cordova user-agent inappbrowser

我使用了Cordova的 InAppBrowser 插件,我想从我的应用中打开一个网页( Android,iOS )。但是,网站应该知道用户是通过移动浏览器还是通过我的应用输入的。

我虽然从我的应用程序更改用户代理将能够工作。是否有类似的解决方案?

我想在我打开一个新窗口之前,我应该定义用户已进入该网站 通过我的应用程序。

window.open("http://test.example.com", "_blank", "location=no");

2 个答案:

答案 0 :(得分:2)

当然,你可以这样做:

window.open("http://test.example.com?entry=app","_blank","location=no");
// see how we added ?entry=app query string?

然后在您正在打开的网页的JavaScript中的某个地方,只需解析“条目”参数,并根据条目的值执行您想要执行的任何特定操作。

如果要在多个页面上使用此逻辑,可能需要设置一些cookie或其他内容,因为如果他们单击InAppBrowser中的链接,它将丢失?entry=app查询字符串。

我想你可以尝试在每次使用addEventListener("loadstart",fn)点击InAppBrowser中的新链接时覆盖URL。这样,每次用户点击新页面时都会调用函数fn,在这里您可以重写URL。它可能是这样的:

var ref = window.open("http://test.example.com?entry=app", "_blank", "location=no");
ref.addEventListener("loadstart", IABcallback);

function IABcallback(event){
    if( event.url.substr(event.url.search(/entry/, '')) === "entry=app"){
        // This is a lazy check for "entry" paramater, you should use a library or something
        console.log("already have entry=app query string");
    }else{
        // open a new window with the same URL but add ?entry=app
        ref = window.open(event.url+"?entry=app", "_blank", "location=yes");
        // reattach this event listener since it is a new window
        ref.addEventListener("loadstart", IABcallback);
    }
}

这个工作“没问题。”主要问题是每次点击当前窗口顶部的链接时,它都会打开一个新的InAppBrowser窗口,使后退按钮无法使用。您可以尝试通过使用ref.close()关闭窗口然后重新打开它来解决这个问题,但是我遇到了问题。我也尝试使用窗口的自定义名称(而不是“_blank”),但这也不起作用。所以,对不起,这是一个有点不完整的答案,但希望它可以给你一些想法。使用自定义查询字符串初始加载应用程序可能要容易得多,然后记住您是通过localStorage或cookie等来自InAppBrowser。

答案 1 :(得分:0)

在Ios中,inappbrowser创建iframe。 因此,您可以检查是否在您的html中创建了iframe,这意味着它是一个inappbrowser,否则它是一个普通的移动浏览器。

if(document.getElementById("_cdvIframeBridge")){ 
 alert('its an inappbrowser')
 }else{ 
 alert('its a mobile browser') 
}