Visio Javascript API加载失败缺少Microsoft.Office.WebExtension

问题描述

SharePoint Framework Web部件中的Visio Javascript API出现问题。它一直在工作,但现在失败了。由于文件https://appsforoffice.microsoft.com/embedded/1.0/visio-web-embedded.js中缺少对Microsoft.Office.WebExtension的引用,因此无法创建“ Visio”对象。

错误 未捕获ReferenceError:未定义Microsoft 在c(visio-web-embedded.js:26)

它在visio-web-embedded.js中的此函数中引用Microsoft.Office.WebExtension:

        function c() {
            Microsoft.Office.WebExtension.onReadyInternal().then((function() {
                return i()
            }
            )).then((function() {
                ...
                }()
            }
            ))
        }

进行了一些整理之后,我添加了对https://appsforoffice.microsoft.com/lib/1/hosted/office.js的引用并可以访问Microsoft.Office.WebExtension,但是visio-web-embedded.js中的另一个对象失败了。

错误 visio-web-embedded.js:26未捕获(承诺)TypeError:无法读取未定义的属性“ richApiMessageManager” 在visio-web-embedded.js:26

case 5:
  return X.promisify((function(e) {
    return OSF.DDA.RichApi.richApiMessageManager.addHandlerAsync("richApiMessage",r,e)
  }));

如何正确使用visio-web-embedded.js?我缺少裁判员吗?

pnp示例项目React-Visio存在相同的问题: https://github.com/pnp/sp-dev-fx-webparts/tree/master/samples/react-visio

解决方法

Visio Online API中可能有一个更新。您可以检查一下我的示例,它具有静态嵌入的Visio嵌入,看起来仍然可以正常工作:

https://github.com/nbelyh/VisioOnlineSpfxWebPart

代码包括这样的Visio API(在package.json中):

  "dependencies": {
    "@microsoft/office-js": "^1.1.40",

然后在config/config.json中输入:

  "externals": {
    "VisioEmbed": {
      "path": "node_modules/@microsoft/office-js/embedded/visio-web-embedded.debug.js","globalName": "Visio"
    }
  },

请注意,这是一个静态引用(即,嵌入代码将打包到您的Web部件中,而不是从Microsoft在线网站引用)。另外,如果将其与您提到的样本进行比较,则是另一种方法。 不过,它可以给您带来一定的稳定性-您可以确定所使用的库的版本彼此兼容。