Safari 解析 JSON-LD 时抛出异常

Pro*_*mit 12 safari structured-data json-ld

使用此简单代码创建一个 HTML 文件并在 Safari 中打开它。

<html>
  <head>
    <script type="application/ld+json">
      [
        {
          "@context": "http://schema.org",
          "@type": "Organization",
          "name": "Parqet",
          "url": "https://www.parqet.com/",
          "logo": "https://www.parqet.com/logos/parqet_logo_pos.svg",
          "sameAs": [
            "https://www.facebook.com/parqetcom",
            "https://twitter.com/ParqetApp",
            "https://www.instagram.com/ParqetApp/",
            "https://www.youtube.com/channel/UC4LOcElG8Z73Hvgbbp3m1KQ",
            "https://www.linkedin.com/company/parqet/",
            "https://github.com/tresorone"
          ]
        }
      ]
    </script>
  </head>
  <body>
    test
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Safari 会产生此错误。

类型错误:未定义不是对象(评估 'r["@context"].toLowerCase')

在此输入图像描述

非常感谢任何有关我们如何解决此问题的见解。在最后一个属性或对象中添加尾随逗号可以消除错误 - 但它不再是有效的 JSON。

Pro*_*mit 7

看起来 Safari 对数组有问题并且需要一个对象。为了仍然编写多个 JSON-LD 定义,我们可以使用该@graph表示法。

这修复了错误。

<html>
  <head>
    <script type="application/ld+json">
      {
        "@context": "http://schema.org",
        "@graph": [
          {
            "@type": "Organization",
            "name": "Parqet",
            "url": "https://www.parqet.com/",
            "logo": "https://www.parqet.com/logos/parqet_logo_pos.svg"
          }
        ]
      }
    </script>
  </head>
  <body>
    test
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

需要明确的是:对象数组是完全有效的。我怀疑这是 Safari 中的一个错误。