0

我目前正在研究一款將作爲打包(桌面)Chrome應用運行的計算器。我正在使用math.js庫來解析數學輸入。這是我的舊代碼:在Chrome瀏覽器中解析原始輸入的網絡工作者打包計算器應用

evaluate.js:

var parser = math.parser(); 
function evaluate(input){ 
    $("#output").text(parser.eval(input)); 
} 

然而,如果輸入的是不合理的東西像6234523412368492857483928!,應用程序只是凍結,因爲它正試圖評估輸入。我知道math.js仍處於測試階段,所以最終可能會出現修復(溢出錯誤),但是我找不到任何其他庫以math.js的方式解析原始輸入。

要解決這個問題,我試圖解決這個問題,使用網絡工作者異步運行它。這裏是我現在所擁有的代碼:

main.js

var evaluator = new Worker('evaluate.js'); 
evaluator.addEventListener('message', function(e){ 
    $("#output").text(e.data); 
}, false); 
function evaluate(input){ 
    evaluator.postMessage(input); 
} 

evaluate.js

var parser = math.parser(); 
function mathEval(input){ 
    return parser.eval(input); 
} 
self.addEventListener('message', function(e){ 
    self.postMessage(mathEval(e.data)); 
}); 

然而,這不工作時我運行它。另外,我注意到當我使用網絡工作者時,它會拋出錯誤Uncaught ReferenceError: math is not defined - evaluate.js:1,但它並沒有將這個錯誤與舊代碼一起拋出。

問題:爲什麼這段代碼不工作來評估輸入?是否有可能使用多個工作人員加快速度?如果我想在工作時間超過2秒時實現某種溢出錯誤,那麼最好的方法是什麼?最後,有沒有更好的方法來做到這一點?

回答

1

Web Workers在完全獨立的環境中運行。他們無法訪問父網頁中的對象。如果你想使用math.js,你必須使用importScript將它導入到worker中。

我建議閱讀Using Web Workers指南,「導入腳本和庫」部分介紹瞭如何去做,以及它如何工作的細節。

+0

如何將Chrome API功能(例如chrome.storage)導入到工作人員? – shlatchz

+0

你不能=)http://stackoverflow.com/questions/21216481/how-can-i-access-chrome-history-from-a-web-worker – jusio

相關問題