2017-02-24 33 views
1

我刚刚创建了一个(JS)Word插件,发现长​​时间的同步操作可能会导致崩溃。在这些情况下,会显示以下错误 - [外接错误很抱歉,我们不得不重新启动,因为此插件未响应。]长时间运行崩溃Office插件(JS)

enter image description here

下面的代码上点击一个按钮跑。

function scanText() { 
 

 
     Word.run(function (context) { 
 
      var body = context.document.body; 
 

 
      context.load(body, 'text'); 
 

 
      return context.sync().then(function() { 
 
       
 
       var r = thisOperationCanTakeALongTimeIfDocIsLarge(body.text); 
 

 
      }); 
 
     }) 
 
     .catch(errorHandler); 
 
    }

如何防止这种情况的发生?我应该使长操作异步吗?这在这种情况下如何实现?

回答

2

我终于找到了解决这个一个好办法...我使用一个WebWorker像这样:

function scanText() { 
 
     var w; 
 

 
     if (typeof (w) == "undefined") { 
 
      w = new Worker("./Scripts/myWebWorker.js"); 
 
     } 
 
     else 
 
     { 
 
      showNotification("Sorry! No Web Worker support."); 
 
     } 
 

 
     w.onmessage = function (event) { 
 
      showNotification(event.data); 
 
     }; 
 

 
     Word.run(function (context) { 
 
      var body = context.document.body; 
 

 
      context.load(body, 'text'); 
 

 
      return context.sync().then(function() { 
 
       w.postMessage(body.text); 
 
      }); 
 
     }) 
 
     .catch(errorHandler); 
 
    }

而且myWebWorker.js文件:

self.importScripts([...some scripts i need...]); 
 

 
self.addEventListener("message", function (e) { 
 
    var r = thisOperationCanTakeALongTimeIfDocIsLarge(e.data); 
 
    postMessage(r); 
 
}, false);