encode脚本和normal脚本混用的问题

简介:

  半年前第一次做脚本编码的时候,由于没有什么使用经验,于是在51js上询问了一下encode脚本和normal脚本混用是否有什么问题呢?结果没有得到任何有建设性的意见,这也至少说明了两个问题,一是没有人在意,二是就没有什么问题嘛。当然我更乐意于接受后一种结果,就开始了encode脚本和normal脚本的混合使用。

    在这样的理解下做了很多的脚本,似乎也真的没有出现过什么问题,于是更加笃信自己当初的判断。结果又一次被IE暗算了,encode后的脚本和normal的脚本混和使用不是没有问题,也不是都有问题,只是在特定的条件下会出问题,真是晕死。看下面这个示例:

< html >
< head >
     < title >JScript Encode Research </ title >
     < meta  name ="author"  content ="birdshome@cnblogs"   />
</ head >
< body >
     < script  language ="jscript.encode"  type ="text/jscript.encode" > </ script >
     < script  language ="jscript.encode"  type ="text/jscript.encode" > </ script >
     < script  language ="jscript"  type ="text/jscript" > </ script >
     < script  language ="jscript"  type ="text/jscript" > </ script >
</ body >
</ html >


    把上面的代码存为一个*.htm文件,打开后得到结果为:

  Call "Object.prototype.Message" Fail.
  Object doesn't support this property or method
  Call "Object.Message" Fail. 
  Object doesn't support this property or method
  Encode.prototype.Message
  Encode.Message
  Normal.prototype.Message
  Normal.Message

    上面那两段jscript.encode的代码很简单,就是:
Object.prototype.Message =  function()
{
    alert('Object.prototype.Message');
};
Object.Message =  function()
{
    alert('Object.Message');
}; 

function Encode()  {}
Encode.prototype.Message =  function()
{
    WriteLine('Encode.prototype.Message');
};
Encode.Message =  function()
{
    WriteLine('Encode.Message');
};  

    如果我们把上面两段代码替换那个html中的两段jscript.encode的代码,后面的运行将不会出任何异常,会得到这样的输出:
  Object.prototype.Message
  Object.Message
  ...

    上面这些代码实例的试验,已经详细的说明了encode脚本代码的问题。就是, 不能在非编码脚本中,引用编码脚本中导入到JScript内置对象上的原型(prototype)方法和静态方法。上面示例中的Object就是JScript的一个内置对象,我们分别导入了一个prototpye方法和静态方法Message()。而对于非内置对象Encode,我们在已编码代码中导入的prototype和static方法,都可以在非编码代码中正常的访问。

    那么怎么访问内置对象的导入方法呢?其实解决起来也不复杂,只是比较繁琐。我们需要使用一些wrapper方法,把他们和被编码的代码放在一起,就可以在非编码代码中访问了,比如上面的Object的导入,我们可以这样包装它:

Object.prototype.Message =  function()
{
    WriteLine('Object.prototype.Message');
};
Object.Message =  function()
{
    WriteLine('Object.Message');
};
var obj =  new Object();

function ObjectPrototypeMessage()
{
    obj.Message();
}
function ObjectMessage()
{
    Object.Message();
}

    这时,我们就可以通过ObjectPrototypeMessage和ObjectMessage这样的wrapper方法访问到已编码代码中内置对象的导入方法了。


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
测试技术
【LaTex】10 从md文件导入\导出word (因为:Typora-版本过高不能转换word 报错:Unknown option --atx-headers. )
【LaTex】10 从md文件导入\导出word (因为:Typora-版本过高不能转换word 报错:Unknown option --atx-headers. )
164 7
|
5月前
|
Python
【代码】Python通过后缀判断Content-Type类型
【代码】Python通过后缀判断Content-Type类型
|
6月前
|
Linux Shell 开发工具
C++ 的 ini 配置文件读写/注释库 inicpp 用法 [ header-file-only ]
这是一个C++库,名为inicpp,用于读写带有注释的INI配置文件,仅包含一个hpp头文件,无需编译,支持C++11及以上版本。该库提供简单的接口,使得操作INI文件变得容易。用户可通过`git clone`从GitHub或Gitee获取库,并通过包含`inicpp.hpp`来使用`inicpp::iniReader`类。示例代码展示了读取、写入配置项以及添加注释的功能,还提供了转换为字符串、双精度和整型的函数。项目遵循MIT许可证,示例代码可在Linux环境下编译运行。
430 0
|
6月前
|
Python Windows
Python 执行RD命令的问题汇总(无效开关 - “Image“。)
Python 执行RD命令的问题汇总(无效开关 - “Image“。)
89 0
|
Shell
12.3.3 Shell script 的默认变量($0, $1...)
12.3.3 Shell script 的默认变量($0, $1...)
76 0
|
JSON 数据格式 Python
Python中对open读取文件内容时的mode模式解析
Python中对open读取文件内容时的mode模式解析
139 0
|
Python
python中argparse库,在B文件中如何调取A文件中的args参数,通过保存文件的方式
在 Python 中,可以使用 argparse 库和 pickle 标准库来实现在不同的 Python 文件之间传递参数。假设我们有两个 Python 文件 A.py 和 B.py,其中 A.py 中定义了一些命令行参数并对其进行了解析,我们想要在 B.py 中调用这些参数,可以按照以下步骤进行操作:
294 0
|
编译器 Python
关于python如何编写注释(包含中文)及出现SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file错误解决方案
关于python如何编写注释(包含中文)及出现SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file错误解决方案
467 0
关于python如何编写注释(包含中文)及出现SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file错误解决方案
|
JavaScript 前端开发
Cypress系列(19)- 可操作类型的命令 之 type()
Cypress系列(19)- 可操作类型的命令 之 type()
235 0
Cypress系列(19)- 可操作类型的命令 之 type()
|
前端开发
Cypress系列(21)- 可操作类型的命令 之 check()、uncheck()
Cypress系列(21)- 可操作类型的命令 之 check()、uncheck()
319 0
Cypress系列(21)- 可操作类型的命令 之 check()、uncheck()