嘿,这是许多插件作者在不需要帮助的情况下所做的事情,不是吗?:) 这就是问题所在——我正在编写一个我打算出售的 jQuery 插件。我想提供一个现场演示;当然,我不希望任何人只使用演示代码。
我知道它很愚蠢,而且它当然不会带来任何好的因果报应,但是我可以在演示脚本中做哪些顽皮的事情,这会让任何尝试使用它的人的生活变得相当困难?想到设置undefined = true
,以及覆盖 jQuery 方法。除此之外还有什么建议吗?
嘿,这是许多插件作者在不需要帮助的情况下所做的事情,不是吗?:) 这就是问题所在——我正在编写一个我打算出售的 jQuery 插件。我想提供一个现场演示;当然,我不希望任何人只使用演示代码。
我知道它很愚蠢,而且它当然不会带来任何好的因果报应,但是我可以在演示脚本中做哪些顽皮的事情,这会让任何尝试使用它的人的生活变得相当困难?想到设置undefined = true
,以及覆盖 jQuery 方法。除此之外还有什么建议吗?
我喜欢Diodeus 的视频(或截屏视频等)的想法。
但是,如果您绝对肯定想要一个交互式演示,请使用 jQuery、您的插件和您的演示代码,将所有三者放在一起,然后将 Closure Compiler 扔给它(如果您可以使用 jQuery 进行高级优化;使用简单否则优化)。Closure Compiler不仅仅是一个缩小器。它实际上重写了您的代码、内联函数(即使在简单模式下)、更改标识符名称等。如果所有代码一起编译,您不必告诉它“导出”任何符号,它可以有一个重命名,内联狂热。:-) 它将三个部分(jQuery、插件和演示)混为一谈,这样工作量就远远超过了解开它们的价值。
JavaScript 环境就其本质而言是不安全的。除了缩小代码之外,您实际上无能为力。如果浏览器可以看到,用户就可以看到。这与试图阻止人们窃取您的图像的论点相同。
如果您想制作演示,请制作视频。
不要让你的 deno 代码成为一个 jQuery 插件:相反,让它成为一个功能等同于 jQuery的库的插件。
基本上,获取 jQuery 的副本并重命名其中的所有函数(和/或交换函数参数的顺序)。然后制作一个你的插件的演示副本,它被修改为使用新的、混乱的 jQuery 副本。
或者(或另外),将它缩小并让它火炬/删除/破坏它不需要的任何 jQuery 组件。任何想要使用您的缩小代码的人都会发现他们的 jQuery 对象已被大幅更改。
所有这些防御措施都有相当简单的解决方法,但它可能会让任何没有足够专注于了解问题所在的人望而却步。最后,您可能会发现这根本不值得付出努力,并相信诚实的客户会让您的开发变得值得。
添加一个只会在您自己的主机上通过的检查。然后缩小代码以掩盖工作原理。
任何许多帖子都表明,大多数 JavaScript都可以毫不费力地被扯掉,尽管这可能会让人们感到困难。我会推荐使用一个好的 JavaScript 混淆器;我刚刚发现了这个,它似乎使它即使是受过训练的眼睛也难以阅读。
前:
var somethingToSay = "hello world";
function saySomething(phrase)
{
alert(phrase);
}
sayHello(somethingToSay);
后:
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('2 0="3 4";8 5(1){7(1)}6(0);',9,9,'somethingToSay|phrase|var|hello|world|saySomething|sayHello|alert|function'.split('|'),0,{}))
值得注意的是,任何混淆都可能会对性能造成轻微影响,但这是为“保护”您的工作所付出的代价。
您可以缩小代码以使其更难阅读。
以屏幕录制而不是实时代码的形式发布您的“演示”。
如果它在那里,它可能会被扯掉。你可以对源代码进行缩小、模糊、做一些奇怪的事情,比如把它拆分成一堆 JS 文件,但它仍然可以被扯掉。如果您真的想要演示,您是否考虑过录制视频演示?