客户端浏览器是否禁用javascript脚本(轻量级保护文章内容)

亮术网 2020-06-05 本网原创

一般来说,客户端浏览器是不会禁用javascript脚本的,因为很多网页都依赖javascript脚本,没有它网页就不能正常运行,会出现诸如网页不能完全显示,网页显示变乱等问题;因此一般情况下不需要检查客户端浏览器是否禁用javascript脚本,但如果用javascript脚本来保护文章内容,也就是用javascript代码禁止用户复制,一旦禁用了javacritp脚本也就能复制了。

用javascript脚本保护文章内容仅是一种轻量级的保护,因为用户仍然能轻而易举的获取文章内容,不说用软件工具抓取了,直接查看网页源码也能获取到文章内容;或许有人会说,禁止查看网页源码,其实这根本禁止不了,禁止了右键菜单中和浏览器菜单中的“查看网页源码”,还可以通过 Ctrl + U 查看。尽管如此,这个方法仍然能对文章起一定的保护作用,因为普通用户并不知道这些。

判断方法通常有多种,一方法是:当客户端打开网页时,用javascript把一个值赋给一个隐藏的input(也可以把值保存到Cookies中),然后在服务器端获取这个值,根据设置值是否成功来判断;另一种方法是:当客户端打开网页时,用ajax把一个值传给服务器,根据服务器是否能成功获取该值来判断。还有一种方法是用 noscript。

 

方法一:javascript把一个值赋给一个隐藏的input实例:

html代码:

<input type="hidden" id="hidId" name="hidId" value="0" />
  <asp:Button ID="btn" runat="server" Text=" 提交 " OnClick="btn_Click" />

 

javascript代码:

<script type="text/javascript">
  function CheckJavascriptOn() {
    var obj = document.getElementById("hidId");
    obj.value = "1";
  }
  CheckJavascriptOn();
  </script>

 

后台代码(C#):

protected void btn_Click(object sender, EventArgs e)
  {
    if(Request.Form["hidId"] == "1")
    Response.Write("客户端浏览器没有禁用javascript脚本");
  }

这种方法需要用户提交表单,服务器端才能获取到客户端设置的值。以上代码在客户端用javascript把隐藏的input(hidId)的值设置为1,如果在服务器端获取到hidId的值为1,则客户端没有禁用javascript;如果获取到hidId的值为0,客户端禁用了javascript脚本。

 

方法二:javascript把一个值保存到cookies

javascript代码:

function CheckJavascriptOn() {
    setCookies("JsIsOn", "1", 3);
  }

function setCookies(cookieName, val, expireHours) {
    var str = cookieName + "=" + escape(val);
     if (expireHours > 0) {
      var date = new Date();
      date.setTime(date.getTime + expireHours * 3600 * 1000);
      str = str + "; expire=" + date.toGMTString();
    }
    document.cookie = str;
  }
  CheckJavascriptOn();

 

后台代码(C#):

if (Request.Cookies["JsIsOn"] != null && Request.Cookies["JsIsOn"].Value == "1")
    Response.Write("客户端浏览器没有禁用javascript脚本");

把 Javascript 的设置值保存到 Cookies 中,不需要用户提交表单,可以放到任意一个页;不过,如果用户禁用了 Cookies,这个方法就不行了,但禁用 Cookie 的用户不多。

 

方法三:把 Javascript 设置的值通过 ajax 传给服务器

网页加载完成后,立即用 ajax 把一个值传给服务器,如果能正常传值,说明客户端浏览没有禁用 javascript。这种方法有一个缺点,当不怀好意的用户故意把网址复制到浏览器地址栏访问判断是否禁用 javascript 的页,容易造成错误的判断。

javascript代码:

var xmlhttp;
  function createXmlHttpObj() {
    try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch (e) {
      try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
      catch (e) {
        try { xmlhttp = new XMLHttpRequest(); }
        catch (e) { }
      }
    }
  }
  function JsIsOnCheck() {
    createXmlHttpObj();
    xmlhttp.open("get", "/test/JsIsOn.aspx?v=1", true);
    xmlhttp.onreadystatechange = function () {
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText != "") {
        var resVal = xmlhttp.responseText;
      }
    };
    xmlhttp.setRequestHeader("If-Modified-Since", "0");
    xmlhttp.send(null);
  }
  JsIsOnCheck();

 

服务器端判断文件(JsIsOn.aspx)代码:

protected void Page_Load(object sender, EventArgs e)
  {
    string param = Request.QueryString["v"];
    if (!string.IsNullOrEmpty(param))
    {
      if (param == "1")
      {
        //客户端浏览器没有禁用javascript脚本
        Response.Clear();
        Response.Write(param);
        Response.Flush();
        Response.End();
      }
    }
  }

 

方法四:用 noscript

当客户端禁用 javascript 时,<noscript></noscript>会显示,只要在其中放能一个自动访问服务器的链接,在服务器端就可以判断客户端是否禁用 javascript。把以下代码放到网页的 <head></head> 之间:

<noscript><meta http-equiv="refresh" content="0; url=IsDisable.aspx" /></noscript>

如果客户端禁用 javascript,打开网页时立即访问 IsDisable.aspx;如果客户端没有禁用 javascript,打开网页时不会访问 IsDisable.aspx。