Office js 有没有办法禁用Office.js中的初始化计时器?
在恶劣的网络条件下测试Office.js加载项时,我们遇到了一个问题。即使在加载脚本之前,也会引发以下错误: Uncaught Office.js尚未完全加载。请稍后再试,或确保在Office.initialize函数中添加初始化代码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
<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>