gpt4 book ai didi

javascript - 当 JSON2 重载时访问原生 JSON 对象

转载 作者:行者123 更新时间:2023-11-29 22:20:12 26 4
gpt4 key购买 nike

我正在实现一个书签,它通过 JSON-RPC 协议(protocol)与 iframe 通信。

但是一些站点,例如 cnn.com 将 JSON2 加载到 window.JSON 中,尽管浏览器已经有一个 native JSON 对象。

问题是在我的 iframe 中我不想遵循同样的错误做法,而且 JSON2 似乎与 Mozilla Firefox 和 Chrome 上的原生 JSON 不兼容:

因此,当我在原生 JSON 和 JSON2 上运行 stringify 时,我得到以下结果:

JSON.stringify({key: "value"})

JSON2

{key:"value"}

原生 JSON

{"key":"value"}

( key 被包裹在")


问题是当 JSON2 生成的字符串中缺少 " 时,原生 JSON 不喜欢它并抛出错误:

Mozilla Firefox:语法错误:JSON.parse:预期的属性名称或“}”

谷歌浏览器:语法错误:意外的 token k

为了彻底解决这个问题,我需要确保使用相同的 JSON 库对字符串进行编码,就像我对它进行解码一样。

一种方法是确保双方都使用 JSON2 或 JSON3,但我想尽可能使用 native json 库。

既然像 cnn.com 这样的网站已经覆盖了原生 JSON 库,我该如何恢复它呢?

我或许可以创建一个指向同一域的 iframe,并从其 contentWindow 中获取 JSON 对象,但那样效率会非常低。

有没有更好的办法?

最佳答案

不确定我是否正确理解你的问题

如果你像这样放置一个空的 iframe

<iframe id="testFrame" name="testFrame" src="about:blank" style="display:none;"></iframe>

那你也可以从js调用

testFrame.JSON.stringify(obj);

唯一的问题是,如果你在 https: 中使用它,如果你需要支持 IE6,src 可能是 javascript:false

编辑:我仍然认为我不值得接受答案,所以我想出了您的代码的修改版本

(function($) {
var frm;
$.getNative = function(objectName, callback) {
if (!frm) {
frm= $("<iframe>", {
src: "javascript:false",
style: "display:none;"
}).appendTo("body").load(function(){
callback(this.contentWindow[objectName]);
// $(this).remove(); <-- this is commented to cache the iframe
});
}
callback(frm[0].contentWindow[objectName]);
}
})(jQuery)

这将使您能够在文档中多次使用 $.getNative(),而无需每次都重新创建框架。

关于javascript - 当 JSON2 重载时访问原生 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com