我的应用程序中包含以下Javascript代码段,以防止点击劫持:

<script language="javascript" type="text/javascript">
     var style = document.createElement('style');
     style.type = "text/css";
     style.id = "antiClickjack";
     style.innerHTML = "body{display:none !important;}";
     document.head.appendChild(style);

     if (self === top) {
         var antiClickjack = document.getElementById("antiClickjack");
         antiClickjack.parentNode.removeChild(antiClickjack);
     } else {
         top.location = self.location;
     }
</script>


基本上,它创建一个样式元素(动态CSS)以默认情况下隐藏当前页面的正文。然后,如果未检测到点击劫持,则会将其删除。因此,通过这种方式,每个没有Javascript的人也可以看到该页面(尽管不会受到点击劫持的保护)。

它适用于除Internet Explorer之外的所有浏览器,后者会引发Unknown runtime error异常。有人对如何解决此问题有建议吗?

谢谢 :-)

最佳答案

您不能通过<style>设置innerHTML元素的内容。我认为正确的属性名称是cssText,但是我必须检查MSDN。

编辑—是的。

因此,您的代码可以执行以下操作:

 var style = document.createElement('style');
 style.type = "text/css";
 style.id = "antiClickjack";
 if ('cssText' in style)
   style.cssText = "body{display:none !important;}";
 else
   style.innerHTML = "body{display:none !important;}";

10-02 01:56