Laravel 5 Javascript启用/禁用检测

时间:2015-09-19 17:45:43

标签: javascript php html laravel laravel-5

我应该在laravel 5中检测到浏览器是否支持Javascript。 据我所知,我必须使用。但我不确定哪个是我可以在laravel 5中使用的第一个php文件?

我应该将它包含在public / index.php中吗?看起来不正确。 期待你的帮助。

3 个答案:

答案 0 :(得分:4)

你不能用PHP做到这一点。您可以在HTML中使用<noscript>标记。

以下是如何做到这一点:

<noscript>
  This page needs JavaScript activated to work.
</noscript>

如果未启用JS,则将执行HTML文档中的代码块。您可以将其放在刀片模板中。

<noscript> tag in w3schools.com

答案 1 :(得分:0)

这可能与其他有关javascript检测的问题重复,您可能会找到答案here。通过谷歌搜索,我在github上找到了一些可能有用的东西link。它似乎支持检查JavaScript支持。它可能正在使用我向您展示的stackoverflow链接中找到的相同技术。

手动方式可以通过重定向到像这样的cookie拾取

来完成

<强>的index.php

<?php

if(isset($_COOKIE["javascript_checked"]))
{
    $GLOBALS["javascript_enabled"] = isset($_COOKIE["javascript_enabled"]) ? true : false;
}
else
{
    setcookie("javascript_check_original_request", "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], time()+3600);
    header("Location: http://" .  $_SERVER["HTTP_HOST"] . "/detectjs.php.php");
    exit;
}


var_dump($GLOBALS["javascript_enabled"]); // prints out the result

<强> detectjs.php

<?php
setcookie("javascript_checked", "true", time()+3600);
?>
<meta http-equiv="refresh" content="1;url=<?php echo $_COOKIE["javascript_check_original_request"]; ?>" />
<script type="text/javascript">

    /**
     * A function to simplify the process of creating a cookie
     * @param string name
     * @param string value
     * @param int days
     */
    function createCookie(name,value,days) {
        if (days)
        {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
    }
    createCookie("javascript_enabled", "true", 1); // creates a cookie that says javascript is enabled for 1 day
</script>

这将检查cookie以查看cookie拾取是否已经发生,如果它还没有,那么它将重定向到设置cookie发送cookie的页面,如果启用了javascript,那么javascript将创建一个cookie,表明它已启用。然后它将重定向回原始请求,这样用户就不会注意到除了第二次延迟之外的差异,即detectjs脚本重定向回原始请求。

现在检查已经完成,php可以将一个布尔值存储到$ GLOBALS变量中,该变量包含一个布尔值,用于是否启用了javascript。您可以在laravel中的任何php文件中引用它,以便在使用

启用javascript时做出决定
if($GLOBALS["javascript_enabled"])
{

}
else
{

}

这可以通过上面的过程轻松完成,但是如果你想使用我链接的laravel库,那就更有力了。

答案 2 :(得分:0)

虽然您不能单独依赖PHP来检测是否启用了Javascript,但您可以使用Javascript来帮助检测Javascript是否已启用。

使用Javascript

设置Cookie

Javascript可以设置Cookie。因此,如果用户没有cookie,那么很好地表明Javascript未启用。如果用户确实拥有cookie,那么用户可能已启用Javascript。 (虽然你不能100%肯定。)

<script>
window.onload = function() {
    document.cookie = "hasjs=true";
}
</script>

现在您可以使用PHP来检查cookie是否存在。

if ($_COOKIE['hasjs'] == 'true') {
    // js enabled.
}

使用Javascript

发出GET请求

Javascript也可以get requests。您可以向&#34;隐藏&#34;提出请求。 PHP脚本。如果脚本从未收到get,则表明Javascript未启用。如果脚本收到get,则用户可能启用了Javascript。 (但同样,你不能百分百肯定。)

<script>
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", "/detectjs", true);
xmlHttp.send(null);
</script>

收到GET后,您可以记下此用户已启用javascript以供将来参考。