一、创建简单的浏览器

import org.eclipse.swt.*;
import org.eclipse.swt.browser.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;public class Myswt3 {public static void main(String [] args) {Display display = new Display();final Shell shell = new Shell(display);shell.setLayout(new FillLayout());final Browser browser;try {browser = new Browser(shell, SWT.NONE);} catch (SWTError e) {System.out.println("Could not instantiate Browser: " + e.getMessage());display.dispose();return;}browser.setUrl("www.baidu.com"); //百度shell.open();while (!shell.isDisposed()) {if (!display.readAndDispatch()) display.sleep();}display.dispose();
}

上面的代码,除了browser.setURL(“www.baidu.com”)这句之外,其他都是必备的套路代码,可以直接粘贴复制。

我简要介绍一下:

1.Display 用于创建可视化的浏览器,它相当于所有组件的父组件。

2.shell 作用应该类似于窗体,它的parent是display

3.browser的try{}catch{}块用于创建浏览器,增加健壮性,其中SWT.NONE是关键语句,这表示默认调用系统的浏览器内核。不过也可以更改参数,比如SWT.Mozilla,调用火狐内核,但是这样还需要一些其他设置,比较麻烦,所以姑且用IE内核吧。

4.最后几行是加载和开始以及关闭释放内存的操作,全部都是套路。

二、运行javaScript代码


final String SCRIPT = "document.write('hello world')";browser.addProgressListener(ProgressListener.completedAdapter(event -> {browser.execute(SCRIPT);}));

将上面两句添加进去,SCRIPT为javaScript代码,你可以写的很简单,也可以写的很复杂。

三、高级功能

这里面有一个很强大的功能是可以实现Html和java的交互,利用Javascript,可以将Html中的一些参数传递出来,在java的程序中进行运算,请看具体的实例

import org.eclipse.swt.*;
import org.eclipse.swt.browser.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;public class Myswt3 {public static void main(String [] args) {final String SCRIPT ="document.onmousedown = function(e) {if (!e) {e = window.event;} if (e) {mouseDown(e.clientX, e.clientY);}}";Display display = new Display();final Shell shell = new Shell(display);shell.setLayout(new FillLayout());final Browser browser;try {browser = new Browser(shell, SWT.NONE);} catch (SWTError e) {System.out.println("Could not instantiate Browser: " + e.getMessage());display.dispose();return;}browser.addProgressListener(ProgressListener.completedAdapter(event -> {final BrowserFunction function = new CustomFunction(browser, "mouseDown");browser.execute(SCRIPT);}));browser.setUrl("www.baidu.com");shell.open();while (!shell.isDisposed()) {if (!display.readAndDispatch()) display.sleep();}display.dispose();
}static class CustomFunction extends BrowserFunction {CustomFunction (Browser browser, String name) {super (browser, name);}@Overridepublic Object function (Object[] arguments) {System.out.println ("mouseDown: " + ((Number)arguments[0]).intValue() + "," + ((Number)arguments[1]).intValue());return null;}
}}

我来具体的解释一下:

首先,在javaScript中定义了一个mousedown函数,他有两个参数就是x,y坐标,但是在代码中没有具体写这个函数的代码,只是声明要用到这样一个函数,而这个函数可以在java代码中进行完善。

定义一个CustomFunction类继承BrowserFunction类,在类中重写 public Object function()函数,而这个函数体就是mousedown的函数体

用于连接的语句就是:BrowserFunction function = new CustomFunction(browser, “mouseDown”);

总体来说就是,

1.javaScript中只简单声明函数和参数

2.以这个函数的名称创建一个BrowserFunction对象

3.覆写BrowserFunction中的public Object function 函数,object arguments 是你自己定义的函数的要传入的参数,比如上例arguments[0],就时clientX,arguments[1]就是clientY,然后在内部具体的实现这个函数,最后加上return。

通过这个过程,将网页中的clientX,和clientY传到了java代码中进行了操作。

所以我们可以利用这个方法来实现更多的功能。

四、继续扩展

除了上面的方法进行交互外还有一种简单的方法,可以用更短的语句实现更多的功能。

browser.evaluate("return document.getElementById('myid').childNodes[0].nodeValue;")

可以使用evaluate函数直接返回值,其中return document.getElementById(‘myid’).childNodes[0].nodeValue;是JavaScript代码。

java SWT Browser实现浏览器功能并运行JavaScript代码相关推荐

  1. 第一百一十八期:运行 JavaScript 代码片段的 20 种工具

    运行 JavaScript 代码片段的 20 种工具 前端日常开发中,我们使用喜爱的 IDE 调试 JavaScript 代码,比如我喜欢的代码编辑器有两个,Sublime Text 3 和 VS C ...

  2. [js] 在不支持js的浏览器中如何隐藏JavaScript代码?

    [js] 在不支持js的浏览器中如何隐藏JavaScript代码? 在<script>标签之后的代码中添加"<!-– ",不带引号. 在</script&g ...

  3. android 运行javascript,Android 端运行 JavaScript 代码 (1)

    Android 端运行 JavaScript 代码 (1) 需要搭建一个 JavaScript 运行环境, 好处一些写在 JavaScript 项目中代码我们可以在 Android 项目中复用, 例如 ...

  4. vue 代码快捷键_你可能不知道的19种运行JavaScript代码工具

    前端日常开发中,我们使用喜爱的 IDE 调试 JavaScript 代码,比如我喜欢的代码编辑器有两个,Sublime Text 3 和 VS Code,前几年还使用过 Atom,偶尔我们会遇到临时需 ...

  5. php运行js代码,如何在PHP中运行JavaScript代码?(代码示例)

    JavaScript是客户端脚本语言,PHP是用于与数据库交互的服务器端脚本语言.那么如何如何在PHP中运行JavaScript?本篇文章就来给大家介绍几种在PHP中运行JavaScript的方法,希 ...

  6. c 后台代码调用ajax,.NET Selenium WebDriver操作调用浏览器后台执行Js(JavaScript)代码...

    1.Selenium WebDriver安装引用 注意:要用使用的浏览器肯定要装,并且Selenium.Chrome.WebDriver版本要和浏览器版一致. 如果要操作其它浏览器,则安装对应其它浏览 ...

  7. java如何调用手机拍照功能_手把手教你如何实现拍照功能

    实现手机拍照功能,纯JS书写 First: 先上图为主,再做详细讲解: 需要注意的是这里的摄像头是主要是通过浏览器中的一个叫做Navigator属性在JS代码运行时打开页面自动开启 不明白?直接上代码 ...

  8. java swt webkit_使用Java和Webkit的HTML编辑器 – SWT浏览器

    我想将WYSIWYG HTML编辑器添加到我的 Java程序中. 我的想法是做像 this这样的事情 但不是用python – 用Java. 我知道几个选项及其问题: > HTMLEditorK ...

  9. 利用java实现浏览器功能 jdic

    2019独角兽企业重金招聘Python工程师标准>>> 使用VC,VB或者C#的开发者们对于在程序里面嵌入一个网页来说,那真是小事一桩.但是在JAVA里面,却几乎是不可能实现的任务. ...

最新文章

  1. day21 登录cookie
  2. HDFS的Secondarynamenode工作机制
  3. 计算器java程序设计报告总体设计,java程序设计实验报告-计算器
  4. 网络基本知识(1) ARP解析
  5. php 静态成员(static)抽象类(abstract)和接口(interface)
  6. 智慧气象 开源_来自开源的半条命11条智慧
  7. linux版本的redis bin,redis-4.0.2.tar.gz for centos的linux系统版本下载(安装详细步骤)...
  8. mongodb多条件查询
  9. 将 30 万行代码从 Flow 迁移到 TypeScript 是一种怎样的体验?
  10. Ubuntu全盘备份与恢复,亲自总结,实测可靠
  11. js 基础-函数传参
  12. dht11 java_树莓派使用DHT11温湿度传感器
  13. 2022华为杯研赛E题草原放牧策略研究代码+思路
  14. @property的使用
  15. NVIDIA显卡驱动程序更新失败解决记录
  16. Nodemcu 背篼酥课堂--物联网实战体系课程
  17. 启动日志中出现The APR based Apache Tomcat Native library which allows optimal performance in production env
  18. 一人干翻专业机构,27岁华裔小伙一战成名!搞出美国新冠最准预测模型,彭博:Superstar
  19. 如何解决opencv与许多第三方库的冲突
  20. C语言编译出现give arg types警告问题

热门文章

  1. c语言数字储存于变量,用C语言写中文数字字符串转数值变量
  2. linux 恢复boot分区,Linux boot分区格式化后恢复 示例
  3. iis7设置html支持asp,Win7下启用IIS7配置ASP运行环境的详细方法
  4. linux加一个2t硬盘吗,在linux下新增一块硬盘的操作。(包含大于2T的硬盘在linux下挂载操作)...
  5. 【TensorFlow-windows】keras接口——BatchNorm和ResNet
  6. 关于Anaconda的环境和包管理
  7. 吴恩达“机器学习”——学习笔记二
  8. 如何在PowerDesigner将PDM导出生成WORD文档或者html文件
  9. 设计理念 : popup login 在前后台
  10. POJ C++程序设计 编程题#7:字符串排序