2015-03-02 27 views
1
  1. 我需要重寫我的打字機上的tampermonkey腳本。如何'返回'在打字稿的功能定義外

  2. 在打字稿上重寫這個javascript的正確方法是什麼?

    if (window.top != window.self) { 
        return; 
    } 
    

主要目標是,如果它在運行window.top不停止執行腳本。

打字稿編譯器寫入錯誤TS1108:「返回」語句只能在函數體內使用。

+0

我們在這裏丟失了一些代碼,但是你的代碼可能被封裝在一個類或函數中。該函數可以從主執行中調用它們。 – 2015-03-02 13:42:48

+0

此代碼適用於所有類和函數之外的JavaScript - 它會停止執行腳本並且看起來像:http://jsfiddle.net/4tfjvvxk/ – lokhmakov 2015-03-02 14:04:31

回答

-1

您不能返回以外的功能,但使用拋出異常,你可以停止執行userscipts(tampermonkey)太:

if (window.top != window.self) { 
    throw new Error("Not on top"); 
} 
+1

不!不要爲標準的OP過程拋出錯誤。除了誘發未來頭部劃痕之外,這也會(非常輕微)不必要地降低瀏覽器性能。 David Laberge在他的(編輯)答案中顯示的,將你的腳本的整個主要部分包裝在一個'if()'中。 – 2015-03-02 21:06:33

+0

我不能像David顯示那樣使用反邏輯,因爲在返回後聲明一些模塊。 並且模塊聲明不能放入if。 – lokhmakov 2015-03-06 09:18:42

1

這是我該怎麼做的。 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腳本。

+0

正如我在我的示例中所說'返回' - 停止腳本。你的例子 - 不是 – lokhmakov 2015-03-02 15:22:52

+0

但感謝鏈接停止JavaScript執行,我重寫腳本拋出異常。 – lokhmakov 2015-03-02 15:33:55

+0

在這個答案中存在邏輯倒置,但這種方法在GM/TM /用戶腳本中是正確的。 – 2015-03-02 21:09:14

0

我懷疑你原來的JS函數只conincidently,即它靜靜地在運行時失敗:

enter image description here

我會重構代碼,將被大衛已經建議的if塊包圍。

+2

不,它不會失敗。 OP的代碼在用戶腳本*中是完全有效的*。他只是想用Typescript對它進行預處理 - 它給出了指示的錯誤。 – 2015-03-04 05:51:48