根据useragent重定向用户

时间:2018-08-07 16:37:24

标签: javascript

我一点也不了解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>

但是,我收到了Uncaught SyntaxError:意外的令牌{在控制台中错误,并且重定向无法正常工作。

编辑:

解决“未捕获”错误。新代码:

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

现在,无论哪种方法都可以正常工作,即它将重定向到我不希望的位置,反之亦然。我尝试了多个表达式,例如< 0> 0== -1等,但都无法正常工作。基本上,它没有给出预期的结果。我已经快找到我的答案了..请帮忙!

2 个答案:

答案 0 :(得分:0)

首先,除非有充分的技术理由要这样做,否则不要这样做。这是互联网;让人们随心所欲地访问您的页面。

第二,相反地,这样做可能更容易-在网络上拥有一组正常的页面,但是如果在应用程序中访问了这些页面,则应用程序会检测到它们,并导航到特定于应用程序的版本。

最后,如果这样做,为了轻松处理多个用户代理,您需要创建一个数组,其中包含所需的所有用户代理字符串,然后遍历它们以检查每个字符串。遵循您最喜欢的有关数组,循环等的JavaScript教程。

答案 1 :(得分:0)

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

<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>

所有这些代码都放在HTML页面的<head>中。