任何阻止用户创建本地副本的优雅方法?

时间:2012-10-04 22:11:19

标签: javascript

我即将发布一个单页应用程序(html + css + js)。

应用程序没有外部依赖关系,这意味着用户可以下载所有文件并将它们安装在单独的位置。根据过去的经验,这是一个糟糕的情况,至少有两个原因:

  • 用户不会收到推送到主要位置的更新
  • 他们倾向于调整他们的本地副本,我最终不得不支持原始代码的多种变体

有没有一种优雅的方法可以防止这种情况发生?我正在考虑一些有力的方法,比如在代码中隐藏日期检查,但我不想走太远而影响业务......

5 个答案:

答案 0 :(得分:2)

首先,您应该拒绝支持最终用户调整过的代码。真。

其次,如果人们下载您的应用程序以便离线使用,那么您可以通过向您的应用添加离线模式来接受这一点。这会阻止人们手动下载文件(因为它在未连接时仍可正常工作),并且在可用时仍会获得更新。查看the various offline abilities of HTML5, including the cache manifest

答案 1 :(得分:1)

不。你只需要说服人们这是一件坏事。 不要为外部托管的应用程序提供支持,但除此之外,您无法做到这一点。

答案 2 :(得分:1)

两个选项:

  1. 将页面放在服务器下一些模糊的文件夹路径下。然后添加一项检查以查看location.href中是否存在文件夹路径。如果用户在本地保存您的文件,他们将无法复制所有文件夹,只会保持文件名不变。

    例如,http://www.pathtosharepoint.com/stackoverflow/index.htm

    <script>
    if(!/stackoverflow/.test(location.href))location="about:blank";
    </script>
    
  2. 设置Cookie。如果页面是在本地保存的,则cookie将无法读取。

    if(!/stackoverflow/.test(document.cookie))location="about:blank";

答案 3 :(得分:0)

简而言之:不,你不能

但是如果你混淆和缩小你的代码,并在你的应用程序中进行一些反复制检查,这可能会使非法复制器的工作变得更难,因为他们必须知道一些JS来解锁你的应用程序。但我必须重申:基于客户端的防复制应用程序(并且可能永远都是)只是一个梦想。

答案 4 :(得分:0)

我看到了这一点,认为这很有趣:

http://closure-compiler.appspot.com/home

查看“高级”单选按钮....