我需要重寫我的打字機上的tampermonkey腳本。如何'返回'在打字稿的功能定義外
在打字稿上重寫這個javascript的正確方法是什麼?
if (window.top != window.self) { return; }
主要目標是,如果它在運行window.top不停止執行腳本。
打字稿編譯器寫入錯誤TS1108:「返回」語句只能在函數體內使用。
我需要重寫我的打字機上的tampermonkey腳本。如何'返回'在打字稿的功能定義外
在打字稿上重寫這個javascript的正確方法是什麼?
if (window.top != window.self) {
return;
}
主要目標是,如果它在運行window.top不停止執行腳本。
打字稿編譯器寫入錯誤TS1108:「返回」語句只能在函數體內使用。
您不能返回以外的功能,但使用拋出異常,你可以停止執行userscipts(tampermonkey)太:
if (window.top != window.self) {
throw new Error("Not on top");
}
不!不要爲標準的OP過程拋出錯誤。除了誘發未來頭部劃痕之外,這也會(非常輕微)不必要地降低瀏覽器性能。 David Laberge在他的(編輯)答案中顯示的,將你的腳本的整個主要部分包裝在一個'if()'中。 – 2015-03-02 21:06:33
我不能像David顯示那樣使用反邏輯,因爲在返回後聲明一些模塊。 並且模塊聲明不能放入if。 – lokhmakov 2015-03-06 09:18:42
這是我該怎麼做的。 Typescript轉換成Javascript,但它不是Javascript。
if(validateIfTop()){
// MAIN BODY OF YOUR USERSCRIPT GOES HERE
}
validateIfTop():boolean{
return window.top === window.self;
}
這應該修復當前的編譯錯誤。但是你可以正常運行的代碼是當前狀態。只是從主腳本中返回一個值是沒有意義的。你可能想看看這個問題:Is it possible to stop JavaScript execution?它解釋瞭如何停止JavaScript腳本。
我懷疑你原來的JS函數只conincidently,即它靜靜地在運行時失敗:
我會重構代碼,將被大衛已經建議的if
塊包圍。
不,它不會失敗。 OP的代碼在用戶腳本*中是完全有效的*。他只是想用Typescript對它進行預處理 - 它給出了指示的錯誤。 – 2015-03-04 05:51:48
我們在這裏丟失了一些代碼,但是你的代碼可能被封裝在一個類或函數中。該函數可以從主執行中調用它們。 – 2015-03-02 13:42:48
此代碼適用於所有類和函數之外的JavaScript - 它會停止執行腳本並且看起來像:http://jsfiddle.net/4tfjvvxk/ – lokhmakov 2015-03-02 14:04:31