【问题标题】:Define User Agent on InAppBrowser from Cordova在 Cordova 的 InAppBrowser 上定义用户代理
【发布时间】:2013-04-29 08:54:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: cordova user-agent inappbrowser


    【解决方案1】:

    当然,你可以这样做:

    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) 覆盖 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 可能会容易得多。

    【讨论】:

    • 谢谢。我也想过同样的事情,但我宁愿通过更改用户代理来做到这一点(我认为这样更整洁)。但是我发现用户代理有几个困难,添加这个参数肯定没有问题。这取决于您要打开的网页,在我的情况下,它是一个 Jquery 移动应用程序,因此所有索引都在启动时加载(没有理由存储 cookie)。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      相关资源
      最近更新 更多