【问题标题】:How to diagnose failed validation of Word Add-In when it works on my own setup?在我自己的设置上运行时,如何诊断 Word 加载项验证失败?
【发布时间】:2019-09-05 15:04:38
【问题描述】:

我正在开发一个 MS Word 插件。我已经在 Windows 和 Mac 上测试过它,它对我来说很好用。 Microsoft 需要对加载项进行自己的验证,以确保它们正常工作,而我的加载项对它们来说会失败,即使它适用于我使用相同版本的 Windows 和 Word。

我与 Microsoft Validation 团队通了电话,他们唯一的建议是我在 Stack Overflow 上发布一个问题,所以就这样吧!

这是适用于我但不适用于 MS 验证团队的 Windows 和 Word 版本:

  • Windows 10 专业版操作系统内部版本 18362.295
  • Word 2016(尤其是 1908 版)

出于调试目的,我向 Microsoft 提交了一个非常简单的加载项。这个简单的插件只有一个按钮,可以在用户的​​默认浏览器中打开一个网页。

这是清单的相关部分:

            <Control xsi:type="Button" id="PB.Home.Button">
              <Label resid="PB.Home.Button.Label"/>
              <Supertip>
                <Title resid="PB.Home.Button.Title"/>
                <Description resid="PB.Home.Button.Desc"/>
              </Supertip>
              <Icon> ... </Icon>
              <Action xsi:type="ExecuteFunction">
                <FunctionName>navigateToWebPage</FunctionName>
              </Action>
            </Control>

这是FunctionFile.html的全部内容:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" ></script>
  <script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script>
  <script src="FunctionFile.js" type="text/javascript"></script>
</head>
<body>
</body>
</html>

这是FunctionFile.js的全部内容:

(function () {
  Office.initialize = function (reason) {};
})();

function navigateToWebPage(event) {
  window.open('https://www.example.com', '_blank');
  event.completed();
}

在我的计算机上,当单击按钮时,会打开一个浏览器选项卡和网页,但对于 MS 验证团队,此消息会显示在 Word 窗口底部的工具栏中

但没有其他事情发生。

“Patent Bots GCP 正在处理您的审查员统计”消息是由 Word 生成的,而不是由我的插件生成的。“Patent Bots GCP”是插件的名称,“审查员统计”是按钮标签(一个清单中的短字符串)。

关于如何找出 Microsoft 验证团队失败的原因有什么建议吗?除了我在此处包含的内容之外,他们无法提供有关该错误的任何详细信息。

我希望 Microsoft 工程师看到这一点并能够提供帮助。

=====

可能是弹出窗口阻止程序问题?看到这个:https://www.tek-tips.com/viewthread.cfm?qid=949178

【问题讨论】:

  • 您使用的 Windows 10 的完整内部版本号是多少?
  • @RickKirkham,Windows 10 专业版操作系统内部版本 18362.295。感谢您的跟进。
  • MS 团队收到的消息中的措辞是否来自您的加载项? (“专利机器人……”)
  • @RickKirkham,该消息是由 Word(或者可能是 Office.js)生成的,而不是由我的插件生成的。请参阅上面编辑过的问题中的详细信息。
  • 可能是异步的问题。也许时间在您的计算机上很幸运,但event.completed 在窗口完成打开之前在验证团队的计算机上运行。搜索“is JavaScript window.open async”,我发现了一些有趣的资源。例如:stackoverflow.com/questions/19026162/….

标签: ms-word office-js


【解决方案1】:

根据 Ragavan 的评论,我在 IE11 上搜索了 window.open() 的意外行为(IE11 是 Windows 10 上 MS Word 中使用的浏览器)。

我找到this other SO question,注意到了

在默认设置的 Windows 10 上的 IE 中,如果我执行 window.open() 从我的页面上针对外部互联网站点 本地计算机或本地网络上的服务器,我得到空值。

该问题进一步指出

有趣的是,如果我为 Intranet 开启“启用保护模式” 区域(以便保护模式在 Intranet 区域和 Internet Zone),然后问题就消失了。

我怀疑这解释了为什么我的插件可以在我的 Windows 10 计算机上运行,​​但不能在验证团队的 Windows 10 VM 上运行。

不幸的是,那里的答案中提出的解决方案(w = window.open('') 后跟w.location = url)在 Word 插件中不起作用。

虽然这并不能解决我的问题,但希望它能为我提供解决方案...

【讨论】:

  • 至少我为此做出了贡献以找到线索
【解决方案2】:

@gaefan。如果将来有人遇到同样的问题,也只需添加我的答案。

如果有人尝试使用 JS window.open 从他们的加载项打开外部站点,肯定会出现Object Expected aka 验证失败错误,这肯定是由 Microsoft 造成的。这取决于各种因素,例如 Windows 10 Build 版本、Office 版本和Browser used by Add-ins

所以要在 App 源中成功发布你的外接程序:

注意:此方法是一种解决方法。但在不久的将来,如果新的边缘铬版本发布。加载项使用的浏览器将被更改。然后可以消除解决方法。

  1. 如果您想从加载项打开任何外部站点,请使用 Task Pane 加载项方法。
  2. 推荐Task-pane插件的原因是你可以在你的HTML中使用anchor tag,如下所示

        <a
        href="https://yourcompany.com/"
        class="button-config"
        target="_blank"
        (click)="performOperation()"
        >Sign up
        </a>
    

点击事件的原因是触发任何analytics functiontrigger logsadd your custom logic

  1. 这肯定会打开外部站点,而无需更改浏览器上的任何设置。

  2. 如果您想继续使用command based add-in,请尝试添加新的Action or Control button 以通过锚标记打开外部站点。

希望它会帮助一些人。谢谢

【讨论】:

  • 谢谢拉加万。如何使用操作或控制按钮通过锚标记打开外部站点?我认为这些按钮仅限于纯 Javascript。
  • 嗨,杰夫。我的意思是您可以在清单中添加另一个按钮。 Button 仍然会期待 JS。但是在您的 JS 中,您可以实现以下两种方法中的任何一种: 1. 使用 DOM 创建锚元素并单击创建的锚标记。或者 2. 你的第二个按钮可以打开任务窗格,你可以在其中设置任何操作。
猜你喜欢
  • 2021-08-03
  • 2023-04-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多