代码之家  ›  专栏  ›  技术社区  ›  Milush Karadimov

Outlook自定义XML加载项错误

  •  1
  • Milush Karadimov  · 技术社区  · 7 年前

    Write your first Outlook add-in
    我可以让外接程序在web应用程序中工作,但无法将其加载到桌面应用程序中。当我导入它时,有时Outlook崩溃,有时加载程序加载,但当我尝试运行它时,会出现一个错误,表明加载程序设置不正确。我试着调试,但我得到的唯一信息是,办公室里似乎有一个错误。我的外接程序使用的js文件,考虑到这个外接程序在web应用程序中按预期工作,我觉得很奇怪。

    以下是用于将自定义外接程序添加到Outlook应用程序的XML:

    <OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MailApp">
        <Id>542385a1-816b-4b29-3f27-8d9bbc0ad244</Id>
        <Version>1.0.0.0</Version>
        <ProviderName>Some-Name</ProviderName>
        <DefaultLocale>en-US</DefaultLocale>
        <DisplayName DefaultValue="Some-Default-Value" />
        <Description DefaultValue="Some-Description-Value" />
        <IconUrl DefaultValue="Some-URL-Icon" />
        <HighResolutionIconUrl DefaultValue="Some-URL-Icon-HighRes" />
        <Hosts>
            <Host Name="Mailbox" />
        </Hosts>
        <Requirements>
            <Sets>
                <Set Name="MailBox" MinVersion="1.3" />
            </Sets>
        </Requirements>
        <FormSettings>
            <Form xsi:type="ItemEdit">
                <DesktopSettings>
                    <SourceLocation DefaultValue="Add-In-Code-URL (HTML for 'home' page of the Add-In" />
                </DesktopSettings>
            </Form>
        </FormSettings>
        <Permissions>ReadWriteItem</Permissions>
        <Rule xsi:type="RuleCollection" Mode="Or">
            <Rule xsi:type="ItemIs" ItemType="Message" FormType="Edit" />
            <Rule xsi:type="ItemIs" ItemType="Message" FormType="Read" />
        </Rule>
        <DisableEntityHighlighting>false</DisableEntityHighlighting>
    </OfficeApp>
    

    我想在Outlook 2016中使用加载项

    1 回复  |  直到 7 年前
        1
  •  3
  •   Marc LaFleur    7 年前

    你的加载项与 the 5 second window to initialize your add-in

    以下是一些一般提示:

    确保您正在从中的CDN引用正确的脚本库 <head>

    <script src="//appsforoffice.microsoft.com/lib/1/hosted/Office.js"
           type="text/javascript"></script>
    

    在代码中 you provided 您正在引用 office.debug.js

    办公室。js库根据您使用的客户端动态加载其他库。加载office的调试版本时。js,它也将动态加载平台特定脚本的调试版本。

    考虑到这在某些客户机中有效,但在其他客户机中无效,您显然处于5s窗口的边缘。因此,虽然这不是什么大不了的事,但几毫秒的网络活动也不会有什么坏处。

    立即分配初始化功能

    当加载项启动时,Office开始监视 initialize 已分配有效的功能,并且Office已执行该功能。

    Office.initialize 在您的 <script> 引用Office。js:

    <script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script>
    <script type="text/javascript">
        Office.initialize = function () {
    
        };
    </script>
    

    经常被忽视的一点 办公室初始化 对插件本身的性能几乎没有明显的影响。这让我们想到。。。

    初始化后,等待DOM

    始终确保您的 $(document).ready :

    <script src="http://code.jquery.com/jquery-3.2.1.slim.min.js" type="text/javascript"></script>
    <script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script>
    <script type="text/javascript">
        Office.initialize = function () {
            $(document).ready(function () {
                initListeners();
                var config = getConfig();
                if (config) {
                    sendTemplatesRequest();
                } else {
                    initLogin();
                }
            });
        };
    </script>
    

    app.js 包含您的 初始化 方法直到最后才被引用。这意味着DOM中的所有内容,包括您正在调用的其他库,都需要在之前完全加载 可以触发。

    <body> jquery office.js 应该加载在 <水头>; 因此,它们比其他任何东西都要早加载。

    作用这三项是您仅有的预先依赖项,其他所有内容都可以保留在页面底部。