【问题标题】:TypeError: Attempting to change configurable attribute of unconfigurable property of iframe's srcTypeError:尝试更改 iframe src 的不可配置属性的可配置属性
【发布时间】:2018-05-07 16:55:03
【问题描述】:

当下面的代码在 chrome、firefox 中执行时,不会出现错误。但是 safari 抛出 TypeError: Attempting to change configured attribute of unconfigurable property。 我不明白 src 是否不可配置,那么为什么 chrome 和 firefox 不会出现错误。

Object.defineProperty(iframe, 'src', {
    writable: false, configurable: true
});

Safari 版本 11.0.1
PS - 我知道更改现有的不可配置属性会引发此错误,但为什么不是 chrome 和 firefox

【问题讨论】:

  • 它仅在 Safari 中不可配置。不同的浏览器有不同的 DOM 实现。
  • 不要试图改变宿主对象的属性。你为什么要这样做?
  • @Bergi 我已经设置了我的 src = "" 并且我不希望我的 src 被修改,否则会导致跨源错误。
  • @SLaks 有什么办法吗?
  • @megha - "...而且我不想修改我的 src..." 所以...不要修改它?这听起来像X/Y problem,上面是 Y;或许我们可以帮助解决 X 问题?

标签: javascript html object ecmascript-5


【解决方案1】:

我不明白 src 是否不可配置,那么为什么 chrome 和 firefox 不会出错

因为不同的浏览器以不同的方式实现 DOM。 Chrome 和 Firefox 似乎没有将src 标记为不可配置。 Safari显然可以。另请注意,在 Chrome 上(至少),src 属性是继承的并且具有 getter/setter,因此在 iframe instance 上调用 defineProperty 将在该实例上创建一个新属性,而不是修改以前从原型继承的行为。 (我没有检查 Firefox 或 Safari。)

如果您想与 Safari 兼容,则需要以不同的方式满足您的基本要求。

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2015-06-13
    相关资源
    最近更新 更多