在GWT中访问Javascript变量

Sex*_*ast 4 java gwt html5 fullscreen jsni

我在Javascript中的变量,其切换之间truefalse当全屏模式分别接通和关断.现在我想在我的GWT代码中访问该变量,并相应地执行一些操作.谁能告诉我怎么做?我无法从Google文档中了解到JSNI...

Sur*_*tta 7

在JavaScript中

var mybool = true;
Run Code Online (Sandbox Code Playgroud)

你在MyClass类中的JSNI方法;

public static native boolean getNativeVariableType(String jsVar)/*-{
        return  eval('$wnd.' + jsVar);
    }-*/;
Run Code Online (Sandbox Code Playgroud)

最后在GWT中使用;

boolean getFormJs = Myclass.getNativeVariableType("mybool");
Run Code Online (Sandbox Code Playgroud)

由于@dodoot提出了这一点,你可以尝试这个return !!$wnd[jsVar]来摆脱eval功能副作用.

正如@manolo所说,如果你正在使用gwtQuery,那么简单地写一下就会更方便$(window).prop("mybool").

  • -1,eval在javascript(以及其他脚本语言)中始终是一个安全问题.它更好(和更短)只是为了测试var是否存在,通过`return !! $ wnd [jsVar]更改所有jsni块 (2认同)
  • @Baadshah你的第二个解决方案根本不起作用!!它总是在窗口中查找属性'jsVar'而不是替换为作为参数传递的值. (2认同)

Man*_*ino 7

就像好奇心一样,对于像这样的简单事情,你可以通过利用gwt overlay类中已经存在的某些jsni方法来避免编写jsni方法.

因此,在您的情况下,您可以获取窗口对象,并将其转换为元素,使用Element类中的getter读取其属性:

Element $wnd = (Element)Document.get().<Element>cast().getPropertyObject("defaultView");
boolean mybool = $wnd.getPropertyBoolean("mybool");
Run Code Online (Sandbox Code Playgroud)

将gwtquery库添加到项目中,代码更简单:

boolean mybool = $(window).prop("mybool");
Run Code Online (Sandbox Code Playgroud)