我使用Cordova 的InAppBrowser插件,我想从我的应用程序(Android、iOS)打开一个网页。但是,网站应该知道用户是通过移动浏览器还是通过我的应用程序进入的。
我虽然从我的应用程序更改用户代理将能够工作。有没有类似的解决方案?
我想在我打开一个新窗口之前,我应该定义用户已经通过我的应用程序进入了网站。
window.open("http://test.example.com", "_blank", "location=no");
我使用Cordova 的InAppBrowser插件,我想从我的应用程序(Android、iOS)打开一个网页。但是,网站应该知道用户是通过移动浏览器还是通过我的应用程序进入的。
我虽然从我的应用程序更改用户代理将能够工作。有没有类似的解决方案?
我想在我打开一个新窗口之前,我应该定义用户已经通过我的应用程序进入了网站。
window.open("http://test.example.com", "_blank", "location=no");
当然,你可以这样做:
window.open("http://test.example.com?entry=app","_blank","location=no");
// see how we added ?entry=app query string?
然后在您正在打开的网页的 JavaScript 中的某个位置,只需解析“entry”参数并根据 entry 的值执行您想要执行的任何特定操作。
如果您想在多个页面上使用此逻辑,您可能需要设置一些 cookie 或其他内容,因为如果他们单击 InAppBrowser 中的链接,它将丢失?entry=app
查询字符串。
我想您可以尝试在他们每次单击 InAppBrowser 中的新链接时使用addEventListener("loadstart",fn)
. 这样,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”),但这也不起作用。所以,很抱歉这是一个不完整的答案,但希望它能给你一些想法。使用自定义查询字符串初始加载应用程序然后记住您来自 InAppBrowser 通过 localStorage 或 cookie 或其他东西可能会容易得多。
在 Ios 中,inappbrowser 创建 iframe。因此,您可以检查是否在您的 html 中创建了 iframe,这意味着它是一个 inappbrowser,否则它是一个普通的移动浏览器。
if(document.getElementById("_cdvIframeBridge")){
alert('its an inappbrowser')
}else{
alert('its a mobile browser')
}