5

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

4

3 回答 3

6

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

  1. 页面无法更改,因此;
  2. 代码不能在覆盖 JSON.stringify 的代码之前运行,因此;
  3. 代码无法保存原始函数对象(以恢复它或稍后显式使用它)。

这是一个黑客:

  1. 创建一个 IFRAME 元素。
  2. 访问contentWindowIFRAME 元素的属性;这应该包含原始的(或“一个新的未触及的”)JSON 对象,因此应该包含原始的 JSON.stringify 函数。

这是jsfiddle

于 2012-09-21T00:24:38.523 回答
3

如果您正在创建一个库,请使其成为JSON.stringify符合标准行为的要求。

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

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

如果这不是为了一个库,而是为了一个个人项目,你应该简单地拒绝加载任何像用不符合的方法替换符合的方法一样愚蠢的第三方代码。

于 2012-09-21T00:05:13.933 回答
1

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

于 2012-09-21T00:06:09.297 回答