我使用了Cordova的 InAppBrowser 插件,我想从我的应用中打开一个网页( Android,iOS )。但是,网站应该知道用户是通过移动浏览器还是通过我的应用输入的。
我虽然从我的应用程序更改用户代理将能够工作。是否有类似的解决方案?
我想在我打开一个新窗口之前,我应该定义用户已进入该网站 通过我的应用程序。
window.open("http://test.example.com", "_blank", "location=no");
答案 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')
}