【发布时间】:2012-10-03 16:35:55
【问题描述】:
我正在实现一个书签,它通过 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 不喜欢它:
Mozilla Firefox:SyntaxError: JSON.parse: expected property name or '}'
谷歌浏览器:SyntaxError: Unexpected token k
为了彻底解决问题,我需要确保使用与解码字符串相同的 JSON 库来编码字符串。
一种方法是确保在两边都使用 JSON2 或 JSON3,但我想尽可能使用本机 json 库。
既然像 cnn.com 这样的网站已经覆盖了原生 JSON 库,我该如何恢复呢?
我也许可以创建一个指向同一个域的 iframe 并从它的contentWindow 中获取 JSON 对象,但这会非常低效。
没有更好的办法吗?
【问题讨论】:
-
json2 do 用双引号将密钥完全包裹起来......
-
@CrisimIlNumenoreano 不是 CNN 安装的任何版本。
标签: javascript json dom cross-domain bookmarklet