atitit.javascript调用java in swt attilax 总结
atitit.javascript调用java in swt attilax 总结
1. BrowserFunction 简介1
1.1. BrowserFunction 可以分为三类: 1
1.2. 事件监听2
2. ati的实现2
2.1. 页面调用2
2.1.1. --------nativeswing的实现2
2.2. java代码2
3. ---code4
4. 参考5
1. BrowserFunction 简介
为了让读者更好的理解后面的内容,在正式介绍之前,需要让读者简单了解一下 BrowserFunction。BrowserFunction 是个非常有意思的类,它可以为 Browser 永久绑定一个 JavaScript 方法,它的构造函数是 BrowserFunction(browser:Browser, name:String),其中 browser 代表 Browser 对象,而 name 则代表绑定该浏览器的 JavaScript 方法名,定义了该 BrowserFunction 对象以后,任何在 Browser 显示的网页,都可以访问名为 name 的 JavaScript 方法。BrowserFunction 只有一个接口 public Object function(Object[] arguments),它接收网页传来的参数,执行 Java 代码返回结果对象。注意:虽然参数和结果都是 Object 类型,但是他们不接收复杂对象,只接受基本数据类型,也就是 String、int 这样的。我估计定义成 Object 的原因是未来将要进行扩展吧。
在 Java 端,绑定了多个的 BrowserFunction,以他们的 name 作为标识。Browser 对象显示了一个 HTML 页面,当该页面想与 Java 端进行交互时,就发出了事件对象,该事件对象可能是表单提交,也可能是超链接跳转,也可能是 JavaScript 的方法调用,最后该事件触发了某个 BrowserFunction 执行 Java 代码。总体来说,
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
1.1. BrowserFunction 可以分为三类:
1、直接存储,比如保存到数据库,保存到文件,该类型无具体的反馈,如上图的 BrowserFunction2。
2、2、回调 JavaScript,在调用完 Java 端代码后,需要回调 JavaScript,类似于 Ajax 的效果,可以保持不刷新页面而改变页面的内容,使用的是 Browser 的 exec 方法。3、操作完 Java 代码,需要定义结果对象作为 FreeMarker 的模板根对象,从模板库中选择模板,生成静态 HTML 网页,然后将 Browser 跳转到该网页,作为结果响应,形成类似 HTTP 的请求 -> 响应模型。
回页首
1.2. 事件监听
本文提到的事件,可以分为三种类型,分别是表单提交、超链接跳转、JavaScript 直接调用 BrowserFunction。其中 JavaScript 调用 BrowserFunction 由于无需刷新页面,可以直接执行,因此无需对其进行特殊监听。然而,Web 上最为常见的表单提交和超链接跳转,都需要刷新页面,而刷新页面时,则无法调用 BrowserFunction。那么如何对这些事件进行监听成为文章的一大难点。
Browser 提供了一个事件监听机制,可以为 Browser 添加地址变更监听器,也就是 LocationListener,这个接口有两个方法
2. ati的实现
2.1. 页面调用
mycallJava("submitx",$("#title").val(),$("#content").val());
2.1.1. --------nativeswing的实现
sendNSCommand('play',video);
2.2. java代码
prj。atibrow
public EditorForm() {
String urlgoto = pathx.classPathParent_jensyegeor()
+ "/blogger/index.html";
super.atiBrowserExampleinstance.setUrlgoto(urlgoto);
super.atiBrowserExampleinstance.gotoUrl();
regJsCallbackMeth("submitx", new Closure() {
@Override
public Object execute(Object arg0) throws Exception {
List ps = (List) arg0;
String p1tit = (String) ps.get(0);
String p2_txt = (String) ps.get(1);
System.out.println(p1tit + p2_txt);
submitx(p1tit, p2_txt);
// System.out.println(b);
return null;
}
});
}
---nativeswing的实现
#
webBrowser.addWebBrowserListener(new WebBrowserAdapter() {
// js java comm
public void commandReceived(WebBrowserCommandEvent e) {
String command = e.getCommand();
System.out.println(" receve commd: " + command);
Object[] parameters = e.getParameters();
if ("cmd1".equals(command)) {
String html = (String) parameters[0];
System.out.println(html);
}
3. ---code
public void regJsCallbackMeth(String string, Closure closure) {
CallJava.eventMap.put(string, closure);
}
package aaBaolilo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.BrowserFunction;
import com.attilax.Closure;
public final class CallJava extends BrowserFunction {
public static Map eventMap=new HashMap();
public static void main(String[] args) {
System.out.println("--");
}
/**
* Constructor
*
* @param arg0
* @param arg1
*/
public CallJava (Browser arg0, String arg1) {
super(arg0, arg1);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.swt.browser.BrowserFunction#function(java.lang.Object[])
*/
@Override
public Object function(Object[] arg0) {
// logger.debug("ImageSelect");
String meth=arg0[0].toString();
List li=new ArrayList ();
for(int i=1;i<arg0.length;i++)
{
li.add(arg0[i]);
}
Closure evet=(Closure) eventMap.get(meth);
try {
returnevet.execute(li);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.function(arg0);
}
}
4. 参考
基于 SWT Browser 与 Freemarker 的 Java 桌面开发.htm
atitit.javascript调用java in swt attilax 总结相关推荐
- android 调用java类_Android中在WebView里实现Javascript调用Java类的方法
搜索热词 为了方便网页和Android应用的交互,Android系统提供了WebView中JavaScript网页脚本调用Java类方法的机制.只要调用addJavascriptInterface方法 ...
- webview 调用java_Android中在WebView里实现Javascript调用Java类的方法
为了方便网页和Android应用的交互,Android系统提供了WebView中JavaScript网页脚本调用Java类方法的机制.只要调用addJavascriptInterface方法即可映射一 ...
- javascript调用java的方法
这篇文章主要讲述如何在JavaScript脚本语言中调用Java类和接口,对大家的学习和工作有一定的参考借鉴价值,有需要的朋友们下面来一起看看吧. 前言 本文中所有的代码使用 JavaScript 编 ...
- javascript调用java方法
本文中所有的代码使用 JavaScript 编写,但你也可以用其他兼容 JSR 223 的脚本语言.这些例子可作为脚本文件也可以在交互式 Shell 中一次运行一个语句的方式来运行.在 JavaScr ...
- Android在使用WebView时,通过Javascript调用JAVA函数
webView = (WebView) findViewById(R.id.article_webview);//WebView启用Javascript脚本执行 webView.getSettings ...
- java代码启动spring_javascript - 从JavaScript调用Java代码( Spring 启动)
这是我的控制器:@Controller @RequestMapping("/test") public class TestServlet { @RequestMapping(&q ...
- 调用servlet java_请问调用servlet并从JavaScript调用Java代码以及参数
发送POST时,添加标题xhttp.setRequestHeader("Contenttype"."application/x-www-form-urlencode&qu ...
- atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97
atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...
- java swing调用H5_atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97...
atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1.实现html5化界面的要解决的策略 1.1.Js交互 Firefox与Chro ...
- JavaScript调Java
1.映射Java对象到JavaScript对象上 MainActivity.java package com.example.jsdemo;import android.os.Bundle; impo ...
最新文章
- Kali linux 2016.2(Rolling)中metasploit的端口扫描
- python绘制派大星_彩色派大星简笔画步骤
- 局部敏感哈希算法(Locality Sensitive Hashing)
- Packt.Java.9.High.Performance.2017.11
- 数据挖掘十大经典算法之——EM 算法
- (转) 对svn分支合并类型和深度的理解
- HDU- 2973 YAPTCHA(威尔逊定理)
- 类型转换出现在赋值运算符左边的情况
- 利用S_MEMORY_INSPECTOR分析内存泄漏问题
- Control-Flow Enforcement Technology (CET)
- 用大白话聊聊分布式系统
- SRS RTC NACK源码分析—1
- 理想主义者与现实主义者的差别
- 张良、萧何与韩信:汉初三杰悲情录[转]
- 前端技术盘点以及 2016 年技术发展方向
- Nose | 超轻的单元测试框架-精通
- android x86主动防御,360手机卫士首家实现X86架构手机主动防御
- 常用快递电子面单接口API对接方法
- 根据血象化验单判断感冒类型
- 淘宝引力魔方复制后怎么移除?有什么优势?
热门文章
- java pdfptable_java Itext PDF 导出 table | 学步园
- Algs4-2.4.5给出以下字母顺序插入大堆的结果
- [20170612]FOR ALL COLUMNS SIZE repeat12c
- 从难民到 Uber 首席技术官:一个亚裔幸存者的故事
- 跳过授权列表--skip-grant-list--案例
- Puppet自动化运维排错案例
- Linux笔记17.数据完整性检测工具
- 探索与发现,我们在路上
- 负载均衡技术沙龙2期圆满结束(现场图文、PPT)
- Codeforces Round #388 (Div. 2) C. Voting