How to prevent the changing of a variable value in Javascript
Possible Duplicate:
Are there constants in Javascript?
号
有没有一种方法可以在javascript中声明一个最终值的静态值,以便第三方无法更改它?
我所拥有的是一个文章共享应用程序,它支持免费用户的广告。我想做的是通过更改内容的存储变量来阻止自由用户更改innerhtml内容。
我现在拥有的是一个计时器,它每5秒在用户网站上重新加载文章的innerhtml,我将重新加载的值存储在一个变量中。
然而,如果一个使用jsbeatify的天才探索了哪一个变量持有删除广告的关键,并改变了这一点,那么我们将失去我们产品的收入和曝光。
如何防止内部变量的变化?
更新这是我最终得出的结论:
http://jsfiddle.net/pgdyp/1/
1 2 | <input type="button" value="try to change the function i to do something different" onclick="t.i = function(){alert(data.secret);}"> <input type="button" value="set function to null out of spite" onclick="t=null;"> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <script type="text/javascript"> e = function(){var data = { }; Object.defineProperty(data, 'secret', { value:"Hello world!", writable : false, enumerable : true, configurable : false });this.z=function(){window.setTimeout("try{document.getElementById('specialdiv').innerHTML = '"+data.secret+"';t.i.z();}catch(err) {document.body.innerHTML=err;}",5000);}} g = function(){}; g.prototype = new e();e=null;window.t = {} Object.defineProperty(window.t, 'i', { value: new g(), writable : false, enumerable : false, configurable : false });g = null; window.t = Object.freeze(window.t); t = Object.seal(window.t); t.i.z(); |
号
这将以压缩格式显示,只是为了使从源代码中复制代码更加困难。这样,简单地复制和粘贴代码的工作将最大化,并且很难实现自动化。
谢谢大家的回答。
是的,有。至少对于对象属性,ES5让我们能够手动更改属性描述符标志。所以我们可以这样做
1 2 3 4 5 6 7 8 | var data = { }; Object.defineProperty(data, 'secret', { value: 42, writable : false, enumerable : true, configurable : false }); |
这样,我们在
这里要注意的是,天才(就像你所说的)也能够发现这个代码并修改它,如果他愿意的话,可以再次更改内容。你不能用这种方式创建一个安全的前端javascript。代码将始终以纯文本形式提供给所有人。
为了使这个更完整,您还可以创建一个对象,并在某个时刻使用
但同样要注意的是:这是为了影响您自己的代码或外部代码,以防止意外或在运行时故意修改。没有办法阻止开发人员,因为他可以在脚本生效之前简单地停止执行。
尝试const关键字。它应该创建一个不变的变量。