Tsc*_*cka 11 javascript static final
可能重复:
Javascript中是否有常量?
有没有办法在javascript中声明最终值的静态,以便它不能被第三方更改?
我所拥有的是文章共享应用程序,免费用户受到广告支持.我想做的是通过改变内容的存储变量来防止免费用户改变innerHTML内容.
我现在拥有的是一个计时器,它每5秒在用户网站上重新加载文章的innerHTML,并且我将重载的值存储在变量中.
但是,如果使用jsbeatify的天才探索哪个变量是删除广告的关键并改变了这一点,那么我们就会失去收入和产品的曝光率.
如何防止内部变量的改变?
这是我想出的最终结果:
<div id="specialdiv"></div>
<input type="button" value="try to change the function i to do something different" onclick="t.i = function(){alert(data.secret);}"><BR>
<input type="button" value="set function to null out of spite" onclick="t=null;">
Run Code Online (Sandbox Code Playgroud)
<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();
</script>
Run Code Online (Sandbox Code Playgroud)
这将以打包格式呈现,只是为了使代码复制出来更难.这样,简单地复制和粘贴代码的工作将最大化并且将很难自动化.
谢谢大家的答案.
jAn*_*ndy 19
就在这里.至少对于对象属性,ES5为我们提供了手动更改属性描述符标志的可能性.所以我们可以这样做
var data = { };
Object.defineProperty(data, 'secret', {
value: 42,
writable : false,
enumerable : true,
configurable : false
});
Run Code Online (Sandbox Code Playgroud)
这样,我们创建了一个secret值为42within 的属性,该属性data无法修改也无法删除.
这里需要注意的是,天才(就像你所说的那样)也能够发现这个代码,并且只是修改它,如果他愿意,可以再次改变内容.您无法以这种方式创建安全的前端JavaScript.代码将始终以纯文本形式提供给每个人.
为了使其更加完整,您还freeze可以在某个时刻创建一个对象,使用Object.freeze()和/或Object.seal()关闭用于枚举,删除和修改对象属性的选项.
但请注意:这是为了影响您自己的代码或外部代码,以防止在运行时意外或故意修改.没有办法阻止开发人员,因为他可以简单地暂停脚本的执行,之后甚至可以生效.
| 归档时间: |
|
| 查看次数: |
16293 次 |
| 最近记录: |