代码之家  ›  专栏  ›  技术社区  ›  Hrishikesh Kokate

基于useragent重定向用户

  •  0
  • Hrishikesh Kokate  · 技术社区  · 6 年前

    我根本不懂javascript。不过,我已经开发了一个Android应用程序,在这个应用程序中,我使用WebView加载网页。我在菜单中有一个共享选项,允许共享随后加载到WebView中的URL。

    对于特定页面,我希望不使用该应用程序的用户重定向到其他页面。为了实现这一点,我的Android应用程序正在使用一个定制的用户代理(比如customua,在本例中)。所以,每当我的应用程序加载这个特定的网页(比如page1.html)时,我希望它在应用程序中正常加载。但是,假设该URL是共享的,如果使用任何浏览器访问该URL,我希望将其重定向到page2.html。基本上,我只希望我的应用程序的UA能够访问page1.html,其他所有UA都将重定向到page2.html。

    我想这可以在我阅读其他解决方案时使用JavaScript来完成。我不能实现它们,因为它们不完全是我的情况,我不知道如何实现它们。我想,我只需要把这个脚本放在我页面的正文中?

    另外,为了以防万一,如果我应该在白名单中包括多个用户代理(即,如果我希望customua和customua 2都能够访问网页),我应该如何修改代码?

    编辑:

    我发现这个代码包含在 <head> :

    <script>
    
    if ((navigator.userAgent.indexOf('MSIE') >= 0) && (navigator.userAgent.indexOf('Opera') < 0))
    {
        window.location.replace("your page");
    }
    else 
    {
       window.location.replace("your page");
    }
    
    </script>
    

    现在,有人能帮我根据需要修改一下吗?如果网页不是我的自定义用户代理,我只希望它被重定向;如果是,我希望它保持在同一页上。

    编辑:

    我使用了这样的代码:

    <script>
    
    if ((navigator.userAgent.indexOf('customUA') < 0)
    {
    window.location.replace("page2.html");
    }
    
    </script>
    

    但是,我得到了未捕获的语法错误:控制台中出现意外的令牌错误,并且重定向不起作用。

    编辑:

    克服了未捕获的错误。新代码:

    <script type="text/javascript">
    if (navigator.userAgent.indexOf('customUA') >= 0)
    {
    window.location.replace("page2.html");
    }
    </script>
    

    现在,它在任何一个方面都可以正常工作,也就是说,它将重定向到我不想要的地方,反之亦然。我尝试过多种表达方式,比如 < 0 , > 0 , == -1 等等。没有一个工作得很好。基本上,它没有给出预期的结果。我马上就要找到答案了……求你了,救命!

    2 回复  |  直到 6 年前
        1
  •  0
  •   Eric    6 年前

    首先,除非有充分的技术原因想这样做,否则不要这样做。这是互联网;让人们随意访问您的页面。

    第二,从另一个角度来看,这可能更容易——在网络上有一组正常的页面,但是如果在应用程序中访问这些页面,应用程序就会检测到它们,并导航到特定于应用程序的版本。

    最后,如果这样做,为了方便地处理多个用户代理,您需要创建一个包含所有所需的用户代理字符串的数组,并通过它们循环来检查每个字符串。遵循你最喜欢的关于数组、循环等的javascript教程。

        2
  •  0
  •   Hrishikesh Kokate    6 年前

    一些来自论坛的人也帮助了我,我设置了错误的用户代理(我在应用程序中定义的代理与我在这个脚本中键入的不同)。下面是代码:

    <script type="text/javascript">
    var uaCheck = navigator.userAgent.indexOf('Custom User Agent');
    if (uaCheck == -1)
    {
    window.location.replace("https://www.domain.tld/redirected-page.html");
    }
    </script>
    

    如果存在多个用户代理,则此代码为:

    <script type="text/javascript">
    
    function isMyAppUA(testUA)
    {
        if(testUA == undefined) return false;
    
        var appUAList = 
        [
            'customUA1', 'customUA2', 'customUA3', ..., 'customUAn'
        ];
    
        appUAList.forEach((ua) => 
        {
            if(testUA.indexOf(ua) > -1) 
            {
                return true;
            }
        });
        return false;
    }
    
    if(!isMyAppUA(navigator.userAgent)) 
    {
        window.location.replace("https://www.domain.tld/redirected-page.html");
    }
    
    </script>
    

    如果用户代理列表较小,则此代码的版本较短:

    <script type="text/javascript">
    
    if (navigator.userAgent.indexOf('customUA') == -1 || navigator.userAgent.indexOf('customUA2') == -1) 
    {
        window.location.replace("https://www.domain.tld/redirected-page.html");
    }
    
    </script>
    

    这些代码中的任何一个 <head> HTML页的。