我即将发布一个单页应用程序(html + css + js)。
该应用程序没有外部依赖,这意味着用户可以下载所有文件并将它们安装在单独的位置。根据过去的经验,这是一个糟糕的情况,至少有两个原因:
- 用户不会收到推送到主要位置的更新
- 他们倾向于调整他们的本地副本,我最终不得不支持原始代码的多种变体
有没有一种优雅的方法来防止这种情况?我正在考虑一些强有力的方法,比如在代码中隐藏日期检查,但我不想走得太远而影响业务......
我即将发布一个单页应用程序(html + css + js)。
该应用程序没有外部依赖,这意味着用户可以下载所有文件并将它们安装在单独的位置。根据过去的经验,这是一个糟糕的情况,至少有两个原因:
有没有一种优雅的方法来防止这种情况?我正在考虑一些强有力的方法,比如在代码中隐藏日期检查,但我不想走得太远而影响业务......
首先,您应该拒绝支持最终用户已经调整过的代码。真的。
其次,如果人们正在下载您的应用程序以离线使用,那么也许您应该通过向您的应用程序添加离线模式来接受这一点。这将阻止人们手动下载文件(因为它在未连接时仍然有效)并且他们仍然会在可用时获得更新。查看HTML5 的各种离线功能,包括缓存清单。
两种选择:
将页面放在服务器上某个不起眼的文件夹路径下。然后添加检查以查看文件夹路径是否存在于location.href
. 如果用户将您的文件保存在本地,他们可能不会复制所有文件夹,只会保持文件名不变。
例如,http://www.pathtosharepoint.com/stackoverflow/index.htm
<script>
if(!/stackoverflow/.test(location.href))location="about:blank";
</script>
设置一个cookie。如果页面保存在本地,cookie 将不可读。
if(!/stackoverflow/.test(document.cookie))location="about:blank";
没有。你只需要说服人们这是一件坏事。不要为外部托管的应用程序提供支持,但除此之外,您无能为力。
简而言之:不,你不能
但是如果你混淆和缩小你的代码,并通过你的应用程序进行一些反复制检查,这会使非法复制者的工作更加困难,因为他们必须知道一些 JS 才能解锁你的应用程序。但我必须重复一遍:基于客户端的防复制应用程序(并且可能永远是)只是一个梦想。