java - 如何在GWT UiBinder中使用JavaScript回调函数?

标签 java javascript html gwt jsni

我想在移动网页上进行 Facebook 登录。这可以通过 Facebook Login Button 来完成。效果很好。我的 GWT UiBinder 页面中有以下代码:

<g:HTMLPanel>
    <div class="fb-login-button" data-max-rows="1" data-size="xlarge" 
                data-show-faces="false" data-auto-logout-link="false" 
                data-scope="email,publish_actions,user_birthday,user_likes" 
                onlogin="alert('I am a JavaScript callback');"></div>

</g:HTMLPanel>

如果登录成功,则会调用 onlogin JavaScript 函数。

如何使用此回调函数在调用此函数时收到通知?有没有办法在这里使用 JSNI 或其他东西?

最佳答案

这是基于洛根斯答案的正确工作版本。我添加了所需的实例变量,因为 myOnload() 方法是非静态的。我还添加了 $entry() 函数来跟踪 GWT 中的错误。

class MyClass{

   MyClass(){

     expose();

     // UiBinder stuff here
   }

   // Call this once. Exports your Java method as a javascript method
   public native void expose()/*-{
       var instance = this;
       $wnd.myOnLoadThing = $entry(function(){
           <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2e47405d5a4f404d4b006e4d41430043570063576d424f5d5d" rel="noreferrer noopener nofollow">[email protected]</a>::myOnload()();
       });
    }-*/;

   public void myOnload(){
       // Put your java onload function here
   };
}

并在您的 uiBinder 中,确保调用 myOnLoadThing

<g:HTMLPanel>
<div class="fb-login-button" data-max-rows="1" data-size="xlarge" 
            data-show-faces="false" data-auto-logout-link="false" 
            data-scope="email,publish_actions,user_birthday,user_likes" 
            onlogin="window.myOnLoadThing();"></div>

</g:HTMLPanel>

这里还有一个很好的答案: How to call GWT java function from Javascript?

关于java - 如何在GWT UiBinder中使用JavaScript回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521346/

相关文章:

javascript - 将信息窗口添加到多个圆圈叠加层

javascript - 在 JS 中转换 OHLC 中的连续股票数据(开盘价、最高价、最低价、收盘价)

html - 如何固定自定义侧边栏位置

html - <h>标签在不同的页面有不同的颜色

java - android:以符号键盘模式启动,但不限于纯数字输入

java - 如何将这个字符数组映射到整数?

javascript - facebook javascript SDK - 如何将用户数据插入数据库

java - 如何读取Spring XML配置中的application.yml?

java - Java EE 中的每个 REST 端点都应该是异步的吗?

javascript - 选择一个重叠的 div