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:[email protected]

转载请注明来源: 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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-10 17:37:20

atitit.javascript调用java in swt attilax 总结的相关文章

Crosswalk+Cordova开发安卓app之 JavaScript调用java (附源代码下载)

 Crosswalk+Cordova开发安卓app之 JavaScript调用java (附源代码下载) 定义js回调接口 /** * js回调接口 * * @author graceup * */ public class JsInterface { public JsInterface() { } @JavascriptInterface public String sayHello() { // TODO do more thing return "Hello World!";

Android WebView使用之JavaScript调用Java代码注意事项

1.被调用的函数上方要添加注释(@android.webkit.JavascriptInterface);否则JavaScript无法找到该方法.

atitit.js&#160;javascript&#160;调用c#&#160;java&#160;php后台语言api&#160;html5交互的原理与总结p97

atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参数个数2 1.3. 事件监听2 1.4. 异常转换2 2. dwrC.exec3 2.1. 支持 ajax 与browExt模式  支持反射,直接继承调用后台api3 2.2. sendNSCommand (nativeswing的实现)3 2.3. --------nativeswing的实现3

JavaScript调Java

1.映射Java对象到JavaScript对象上 MainActivity.java package com.example.jsdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends AppC

Atitit 图像处理 调用opencv 通过java &#160;api &#160;&#160;attilax总结

Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1.2. 安装2016-05-19  opencv v2.4.13   267M  ,一个压缩包解压即可1 1.3. Opencv d java 接口api  ,把opencv-2413.jar加入java项目1 1.4. /AtiPlatf_ee/src/com/attilax/img/SfitTes

Atitit&#160;插件机制原理与设计微内核&#160;c#&#160;java&#160;的实现attilax总结

Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结 1. 微内核与插件的优点1 2. 插件的注册与使用2 2.1. Ioc容器中注册插件2 2.2. 启动器微内核启动3 3. 插件的俩种执行策略3 3.1. 必须手动接续,否则自动终止(推荐)3 3.2. 必须手动throw  stop ex终止,负责自动接续..4 4. 插件链的生成原理4 5. -------code4 6. 参考7 1. 微内核与插件的优点 但凡有生命力的产品,都是在扩展性方面设计的比较好的,因

Android的JS调用Java代码或使用了Javascript相关技术改如何混淆

http://www.androidren.com/index.php?qa=282&qa_1=android的js调用java代码或使用了javascript相关技术改如何混淆 Android 4.2开始 JS调用Java代码的时候必须加上@JavascriptInterface才能调用. 加上@JavascriptInterface之后就必须要考虑混淆时候的问题,如果混淆的时候把@JavascriptInterface搞丢了你的程序就无法调用了. 其实很简单,你只需要在混淆里面加上: -ke

atitit.印度教与java宗教的特点与观念对比 attilax总结

atitit.印度教与java宗教的特点与观念对比 attilax总结 1. Java就是一种宗教 1 2. Java的教义思想,社区理念,价值观念 2 2.1. 教学语言,类似与印度教的祭祀万能 2 2.2. vm 2 2.3. 大杀器,重型框架   无所不能 2 2.4. Crossplatform 2 2.5. 功能齐全 2 2.6. 继承c++,万世一系 2 2.7. 开放精神 2 2.8. 重视设计,轮回理论..因果报应 2 2.9. 组织机构层次分明 3 2.10. 软件不是一时之建

如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码

1首先是如何在自己的app里用网页显示,这样可以较快的更新界面而不需要让客户端升级,方法如下: xml文件: <WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/web_v" /> 2在activity里绑定网页: public class MainActivity extends Action