Office js 有没有办法禁用Office.js中的初始化计时器?

Office js 有没有办法禁用Office.js中的初始化计时器?,office-js,Office Js,在恶劣的网络条件下测试Office.js加载项时,我们遇到了一个问题。即使在加载脚本之前,也会引发以下错误: Uncaught Office.js尚未完全加载。请稍后再试,或确保在Office.initialize函数中添加初始化代码 <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <title>T

在恶劣的网络条件下测试Office.js加载项时,我们遇到了一个问题。即使在加载脚本之前,也会引发以下错误: Uncaught Office.js尚未完全加载。请稍后再试,或确保在Office.initialize函数中添加初始化代码

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <title>Test Init</title>
    <script src="//appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
</head>

<body class="ms-font-l" style="width:100%;height:100%;overflow:hidden;position:relative;">
<div id="app" style="height:100%"></div>
<script>
    console.log('Our script loaded...');
    setTimeout(function () {
        Office.initialize = function () {
            console.log('Our App Initialized!!!')
        };
    }, 15000);
</script>
</body>

</html>
经过数小时的调试,我们在Office.js中发现了以下代码:

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <title>Test Init</title>
    <script src="//appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
</head>

<body class="ms-font-l" style="width:100%;height:100%;overflow:hidden;position:relative;">
<div id="app" style="height:100%"></div>
<script>
    console.log('Our script loaded...');
    setTimeout(function () {
        Office.initialize = function () {
            console.log('Our App Initialized!!!')
        };
    }, 15000);
</script>
</body>

</html>
waitForFunction方法采用4个参数: 函数-返回布尔值的状态检查函数。 函数-当状态检查函数返回true或方法失败时调用的回调函数。 Number—重试次数。 Number-尝试之间的毫秒数

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <title>Test Init</title>
    <script src="//appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
</head>

<body class="ms-font-l" style="width:100%;height:100%;overflow:hidden;position:relative;">
<div id="app" style="height:100%"></div>
<script>
    console.log('Our script loaded...');
    setTimeout(function () {
        Office.initialize = function () {
            console.log('Our App Initialized!!!')
        };
    }, 15000);
</script>
</body>

</html>
根据我们找到的源代码,Office外接程序在框架超时之前有大约20秒的时间进行初始化,然后干脆放弃。这在Office 365联机和慢速连接上特别有问题

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <title>Test Init</title>
    <script src="//appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
</head>

<body class="ms-font-l" style="width:100%;height:100%;overflow:hidden;position:relative;">
<div id="app" style="height:100%"></div>
<script>
    console.log('Our script loaded...');
    setTimeout(function () {
        Office.initialize = function () {
            console.log('Our App Initialized!!!')
        };
    }, 15000);
</script>
</body>

</html>
以下加载项复制了该问题:

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <title>Test Init</title>
    <script src="//appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
</head>

<body class="ms-font-l" style="width:100%;height:100%;overflow:hidden;position:relative;">
<div id="app" style="height:100%"></div>
<script>
    console.log('Our script loaded...');
    setTimeout(function () {
        Office.initialize = function () {
            console.log('Our App Initialized!!!')
        };
    }, 15000);
</script>
</body>

</html>

目前无法避免超时。也就是说,您应该在执行任何其他操作之前始终调用Office.initialize。一般来说,我的指导是把这个电话放在你头上的底部

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <title>Test Init</title>
    <script src="//appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
</head>

<body class="ms-font-l" style="width:100%;height:100%;overflow:hidden;position:relative;">
<div id="app" style="height:100%"></div>
<script>
    console.log('Our script loaded...');
    setTimeout(function () {
        Office.initialize = function () {
            console.log('Our App Initialized!!!')
        };
    }, 15000);
</script>
</body>

</html>
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <title>Test Init</title>
    <script src="//appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
    <script>
        Office.initialize = function () {
            console.log('Office Initialized!!!')     

        };
    </script>
</head>
然后,当文档准备就绪时,我使用事件触发所需的任何其他初始化代码,即document.addEventListenerDOMContentLoaded、functionevent{}或JQuery的$document.ready

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <title>Test Init</title>
    <script src="//appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
</head>

<body class="ms-font-l" style="width:100%;height:100%;overflow:hidden;position:relative;">
<div id="app" style="height:100%"></div>
<script>
    console.log('Our script loaded...');
    setTimeout(function () {
        Office.initialize = function () {
            console.log('Our App Initialized!!!')
        };
    }, 15000);
</script>
</body>

</html>