我正在实现一个通过 JSON-RPC 协议与 iframe 通信的小书签。
然而,一些网站,例如 cnn.com 会加载 JSON2,window.JSON
尽管浏览器已经有一个原生的 JSON 对象。
问题是,在我的 iframe 中,我不想遵循同样的错误做法,而且 JSON2 似乎与 Mozilla Firefox 和 Chrome 上的本机 JSON 不兼容:
因此,当我在本机 JSON 和 JSON2 上运行 stringify 时,我得到以下结果:
JSON.stringify({key: "value"})
JSON2
{key:"value"}
原生 JSON
{"key":"value"}
(密钥包含在 中"
)
"
问题是,当JSON2 生成的字符串中缺少 并引发错误时,本机 JSON 不喜欢它:
火狐浏览器:SyntaxError: JSON.parse: expected property name or '}'
谷歌浏览器:SyntaxError: Unexpected token k
为了彻底解决这个问题,我需要确保使用与解码字符串相同的 JSON 库来编码字符串。
一种方法是确保在双方都使用 JSON2 或 JSON3,但我想尽可能使用本机 json 库。
所以现在像 cnn.com 这样的网站已经覆盖了原生 JSON 库,我怎样才能回到它呢?
我也许可以创建一个指向同一个域的 iframe 并从中获取 JSON 对象contentWindow
,但这会非常低效。
没有更好的方法吗?