javascript - 从第二个页面返回的 JSON 对象在 IE 8 中不进行字符串化

标签 javascript json internet-explorer-8

考虑以下场景:

FooPage 是点击“添加”后打开 BarPage 的页面。

BarPage 有一个“返回”按钮。单击它后,它会执行以下操作:

function Add() {
    var selectedResources = [{ 
        "ResourceID": "10", 
        "ResourceName": "Foo", 
        "ResourceTypeName": "Bar"
    }];
    if (window.opener != null 
        && typeof window.opener.AddResources != "undefined") {
        window.opener.AddResources(selectedResources);
        window.close();
    }
}

FooPage,如您所见,有一个名为 AddResources 的函数。它执行以下操作:

function AddResourcesCallback(selectedResources) {
    var result = JSON.stringify(selectedResources);
}

在 Chrome 中,这很好用——字符串是从 JSON.stringify 中的 JSON 创建的,大家都很高兴。

然而,在 IE8 中,这不起作用。 JSON 不会创建为字符串 - 相反,JSON.stringify 返回 undefined

我试着把场景改成这样,作为测试:

function AddResourcesCallback(selectedResources) {
    var selectedResources = [{ 
        "ResourceID": "10", 
        "ResourceName": "Foo", 
        "ResourceTypeName": "Bar"
    }];
    var result = JSON.stringify(selectedResources);
}

在这种情况下,IE8 中的 JSON.stringify 会返回正确的值,就像 Chrome 一样。这意味着,在 IE8 中,当在页面之间传递数组时,您无法将数组解析为 JSON。

有没有一种方法可以在不先将其字符串化的情况下传递数组?

最佳答案

似乎是一个跨窗口范围问题 - 这两个对象具有不同的 Object.prototype 原型(prototype)对象,这可能会混淆 IE(特别是如果其中一个由于窗口关闭而被垃圾收集)。尝试使用其他窗口的 JSON 函数进行字符串化,如下所示:

// BarPage
if (window.opener != null && typeof window.opener.AddResources != "undefined") {
    window.opener.AddResources(selectedResources, JSON);
    window.close();
}

// FooPage
function AddResourcesCallback(selectedResources, json) {
    var result = json.stringify(selectedResources));
}

但是,我认为在一个窗口中进行字符串化,传递字符串并在另一个窗口中解析它是最安全的方法。

关于javascript - 从第二个页面返回的 JSON 对象在 IE 8 中不进行字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14726333/

相关文章:

html - IE 8 CSS 选择器

javascript - 如何使用jquery删除json字符串中的空值

javascript - 如何为带有服务的 Controller 编写单元测试

javascript - 将表值转换为 JSON 值

python - 无法使用循环访问字典键,我收到 TypeError

html - 为什么我不能更改 IE8 中的选择选项样式?

javascript - 想要在选中复选框时显示特定的 div,如果未选中则隐藏 div。IE8/IE9 不工作

javascript - 如何使用 Keycloak 保护 Vert.x 3.3 Eventbus Bridge

javascript - 查找表单中选中的复选框数量,结果是实际数量的两倍

java - 安卓java : foreach through json array returning values?