2013-04-29 205 views
1

定义用户代理我用从科尔多瓦InAppBrowser插件,我想从我的应用程序(的Android,iOS的)打开网页。但是,网站应该知道用户是通过移动浏览器还是通过我的应用程序进入的。上InAppBrowser从科尔多瓦

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

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

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

回答

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查询字符串。

我想你可以尝试在每次点击InAppBrowser中的新链接时使用addEventListener("loadstart",fn)来覆盖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中获取的。

+0

谢谢。我想过的是同样的事情,但我宁愿通过更改用户代理来实现(我认为它更像这样)。但是我发现用户代理有几个困难,并且添加这个参数绝对没有问题。它取决于你想打开的网页,在我的情况下,它是一个Jquery移动应用程序,所有的索引都在启动时加载(无需存储cookie)。 – 2013-05-08 10:29:24