如何在Javascript中恢复被覆盖函数的原始状态

时间:2012-09-21 00:01:47

标签: javascript

假设您有一个脚本需要在覆盖javascript的JSON的页面上运行。 stringify,你如何确保你的代码使用原始字符串而不是被覆盖的字符串?

3 个答案:

答案 0 :(得分:3)

如果要创建库,请JSON.stringify符合标准行为。

对代码提出严格要求并没有错,实际上这是一个好主意。您只需要确保记录要求。

显然,如果原件被永久覆盖,则无法使用它。将负担放在最终用户身上是一个更好的解决方案。

如果这不是针对某个库,而是针对个人项目,那么您应该简单地拒绝加载任何第三方代码,这些代码执行的操作与将不符合方法替换为符合标准的方法一样愚蠢。

答案 1 :(得分:3)

虽然我会选择其中一个其他答案,但以下是针对以下情况的解决方案:

  1. 页面无法被更改,因此;
  2. 代码无法在覆盖JSON.stringify的代码之前运行,因此;
  3. 代码无法保存原始功能对象(以便将其还原或稍后明确使用)。
  4. 这是一个黑客攻击:

    1. 创建IFRAME元素。
    2. 访问IFRAME元素的contentWindow属性;这应该包含原始(或“一个新的未触动的”)JSON对象,从而包含原始的JSON.stringify函数。
    3. Here is the jsfiddle

答案 2 :(得分:1)

在覆盖JSON.stringify之前对其进行备份。如果您无法对其进行备份,请使用a shiv