2015-03-02 81 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