我可以阻止下载JavaScript文件吗?

时间:2010-09-08 16:05:27

标签: javascript jquery html jquery-plugins

为什么我要阻止HTML下的JS文件下载?好吧,这是我的页面加载时间表:

  1. jQuery(1.2)已加载
  2. 加载jQuery插件(扩展当前的jQuery对象)
  3. 自定义JS加载
  4. 自定义JS使用document.write添加额外的脚本
  5. 添加的额外脚本加载一个新的jQuery(1.4,但没关系)
  6. - >所以我的扩展已经消失,因为它是一个新的jQuery对象
  7. 我不能做的是在(2)之前放(5)或(3)。我正在使用Drupal(PHP框架),这些是贡献的模块。我也无法在第(3)点解析添加的脚本,因为它使用document.write。

    所以我想也许我可以拒绝下载第二个jQuery脚本。目前我没有其他想法。但这可能是不可能的。你觉得怎么样?

3 个答案:

答案 0 :(得分:1)

没有。即使您以某种方式阻止用户直接在浏览器中定位您的.js,它仍会在访问该页面时下载到计算机的硬盘驱动器中。即使你以某种方式设法将.js文件保存下载到访问者的硬盘驱动器,它仍然必须驻留在计算机的内存中。没有办法保护您宝贵的源代码免受窥探。然而,混淆使其变得更加困难。

我能想到的唯一解决方案是让您的Web应用程序渲染屏幕,拍摄屏幕截图,然后将图像发送给访问者。祝你好运。

答案 1 :(得分:0)

我能做的是在(6)之后再次加载jQuery扩展(2)。它有效,但不是很好。

答案 2 :(得分:0)

所以,这就是我想出的:

而不是阻止JS我可以将它放入iframe - 这使得它成为一个沙盒环境,因此它不会伤害任何其他东西。这个给你: 首先必须解析外部脚本,因为我将其作为字符串传递:

function parse_str_to_js($txt) {
  $txt = str_replace('\\', '\\\\', $txt);
  $txt = str_replace('"', '\\"', $txt);
  $txt = str_replace("\r\n", '\n', $txt);
  $txt = str_replace("\n", '\n', $txt);
  $txt = str_replace('<', '\u003C', $txt);
  $txt = str_replace('>', '\u003E', $txt);
  return $txt;
}

然后用HTML而不是:

<php echo $advertisement_script; ?> 

应替换为占位符:

<div id="advertisement"></div>

在JavaScript中,将创建一个iframe:

$(function(){
  $('#advertisement').html('<iframe id="iframe_advertisement"/>');
  var advertisement = "<?php echo parse_str_to_js($advertisement); ?>";
  document.getElementById('iframe_advertisement').contentWindow.document.write(advertisement);
});