当前位置: 首页 > 面试题库 >

如何使用JSNI从GWT Java运行JavaScript函数?

鄢飞鸾
2023-03-14
问题内容

从手册中无法理解:实际上如何从Java运行JS函数?

例如,我的html页面中有一个函数:

<script type="text/javascript" language="javascript">
    function foo() {
        alert('Foo!');
    }
</script>

以下模块显示了两个按钮,其中只有第二个起作用:

public class Test_GoogleWeb_JSNI_01 implements EntryPoint {

public void onModuleLoad() {

    Button fooButton = new Button("Foo!");
    fooButton.addClickHandler(new ClickHandler(){
        public void onClick(ClickEvent event) {
            fooRunner();
        };
    });


    HTML fooButtonNative = new HTML();
    fooButtonNative.setHTML("<input type='button' value='Foo Native' onclick='foo()'>");

    RootPanel rootPanel = RootPanel.get();
    rootPanel.add(fooButton);
    rootPanel.add(fooButtonNative);

}

public static native void fooRunner() /*-{
  foo();
}-*/;
}

手册中说,本机函数在嵌套框架内实现,这说明了这种情况。但是如何运行JS函数呢?

更新1 以下工作。

Java:

public static native void fooRunner() /*-{
  $doc.fooRunner();
}-*/;

JS:

<script type="text/javascript" language="javascript">
    document.fooRunner = function foo() {
        alert('Foo!');
    }
</script>

有没有更好的办法?


问题答案:

您自己回答了问题。出于一个非常简单的原因,没有更好的方法:部署GWT应用程序有多种方法,在iframe中运行只是其中一种选择。这就是为什么必须使用$
wnd变量来访问外部JS函数的原因,因此,如果切换了链接器,您的静态代码也可以正常工作。



 类似资料:
  • 我是JavaScript和React的新手,我正试图远离教程,所以为了自己的学习利益,我开始制作一个简单的应用程序,但遇到了功能异步运行的障碍。 在中,有一个,其回调中包含以下内容: 如何使上述两个函数同步运行使用在中设置的,但下面的显示在完成之前启动。 我已经阅读了一些参考资料,其中提到使用promise,但我不知道如何应用它。。。我还想知道是否可以通过/实现。 完整(ish)代码:(为了简单起

  • 问题内容: 如何从PHP调用JavaScript函数? 以下代码来自 xyz.html (单击按钮时),它在外部 xyz.js中 调用a 。这将调用wait.php。 和 wait.php 从那里以同样的方式从另一个PHP文件调用代码。 该否则工作正常,但它不会被调用我想要的方式。 问题答案: 就PHP而言(或者实际上,通常是一个Web服务器),HTML页面只不过是一个大字符串而已。 您可以使用P

  • 问题内容: 我正在做一个网络抓取项目。我正在使用的网站之一的数据来自Javascript。 在我之前的一个问题中,有人建议我可以直接从Python调用Javascript,但是我不确定如何实现。 例如:如果JavaScript函数定义为: 如何从Python调用JavaScript函数? 问题答案: 查找具有Python绑定的JavaScript解释器。(尝试Rhino?V8?SeaMonkey?

  • 问题内容: 我想从JavaScript 调用,这是一个C#函数。我尝试了下面的代码,但是无论JavaScript条件是还是,都被调用了! JavaScript代码: 后面的C#代码: 如何从JavaScript调用C#函数? 问题答案: 您可以使用Web方法和Ajax:

  • 我需要帮助了解如何从函数运行导入代码! 正如你所看到的,我是新来的python. time语音是另一个. py文件,当我做运行。我试图通过一个函数来运行它,如果在列表中回答:timespeech.say时间(),我相信你应该把它作为,但我不确定之后会发生什么。请帮助!

  • 我不是一个JavaScript/jQuery编码器,不确定我要做的事情是否可能。 我有一个HTML/PHP/Ajax表单,它在用户填写时更新了sql数据库。当他们填写表单时,JavaScript/jQuery会运行一个进度条,该进度条会随着用户在输入中键入内容而更新。函数的开始如下所示: 这个很管用。我的问题是重新加载页面的时候。我的代码是从数据库中提取sql数据来填充页面上每一个有值的输入的值,