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

java调用chrome内核_selenium中如何测试360等基于chrome内核的浏览器 直接上代码,注意是基于chrome内核的浏览器,基于ie的请替换其中的chrome方法为ie,但自己未尝试过,如果有结果可以告知!from selenium.webdriver.chrome.options import Optionsfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysimpor... 阅读详情

搜了好多中文教程,要么时间太久,要么太过于简略,没有干货。迫于无奈,硬着头皮去看官方源文档。还是有一点的收获。分享一下。

swt用于图形界面开发,关于他的初级介绍,建议去IBM的网站https://www.ibm.com/developerworks/cn/opensource/os-jface1/#artrelatedtopics,这个是一个简单的介绍。要想详细的了解,直接去eclipse官网:http://www.eclipse.org/swt这上面,应有尽有,唯一的不方便之处就是有些专业英语词汇比较难搞清楚,需要花一点时间慢慢消化。

我主要想用里面的浏览器Browser控件实现一些功能,所以重点了解了一下,发现它的功能很是强大。

一、创建简单的浏览器

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);
	}
	@Override
	public 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代码。

(注:本代码来自eclipse 官网)

SWT可交互式Browser控件 在许多平台中,Browser控件皆被作为一个必需的控件给出,并提供了DOM接口,用于访问Browser的内容,相对来说SWT中的Browser控件就比较薄弱,没有提供DOM的可控制接口,那么,如何和控件所加载的页面进行交互呢?比如需要在集成web应用的环境中实现模拟登陆、自动填表等功能。 SWT中对Browser有不同的实现,目前实现的有IE和Mozilla。在Browser的构造函 阅读详情

相关推荐

java调用chrome浏览器内核cef实现,非jxbrowser

java调用chrome浏览器内核,cef实现,非jxbrowser,非常不错

SWT-套用IE浏览器代码

import org.eclipse.swt.SWT;import org.eclipse.swt.browser.Browser; import org.eclipse.swt.browser.OpenWindowListener;import org.eclipse.swt.browser.StatusTextEvent; import org.eclipse.swt.b

无若 2022

UA-DETRAC数据集转YOLO格式

UA-DETRAC转YOLO

lafsca5的博客 9106

Java用SWT内嵌浏览器Browser对象使用JQuery等Web插件

前言 我们知道web 的UI界面真得很漂亮,而且开源社区有很多插件可以用,所以要开发出漂亮的页面也很容易。那么,我们使用SWT/JFace进行桌面软件的开发时,也想要实现一些像JQuery EasyUI等等漂亮的表格,可以说是非常难。但是,SWT Browser 是 Eclipse SWT 的标准部件,它提供了把 HTML 整合到 Java 平台的能力。该部件植入了平台流行的 HTML 渲染引擎...

200+新能源动力电池研发测试生产售后项目上位机开发 3175

从配置文件加载顺序揭秘:为什么你的logback.xml读不到application.yml?

本文深入解析了Spring Boot中logback.xml无法读取application.yml配置的原因,揭示了Spring Boot配置加载机制与日志系统初始化的时序问题。通过对比logback.xml与logback-spring.xml的差异,提供了使用springProperty标签和系统属性传递等解决方案,帮助开发者有效解决日志配置问题。

weixin_29214335的博客 364

halcon3D 点云拟合球体

halon3D 点云拟合球面

weixin_43213429的博客 1639

java swt实现浏览器_《java-SWT浏览器实现》

import org.eclipse.swt.SWT;import org.eclipse.swt.browser.Browser;import org.eclipse.swt.widgets.Button;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Event;import org.eclipse.s...

weixin_42553588的博客 321

【软考】数据库系统工程师备考指南(一)

目录一、数据库系统工程师简介二、考试要求三、考试目标四、考试范围(一)信息系统知识(二)数据库系统设计与管理 一、数据库系统工程师简介 数据库系统工程师考试属于全国计算机技术与软件专业技术资格(水平)考试(简称计算机软件水平资格考试)中的一个中级考试。考试不设学历与资历条件,也不论年龄和专业,考生可根据自己的技术水平选择合适的级别合适的资格,但一次考试只能报考一种资格。考试采用笔试形式,考试实行全国统一大纲、统一试题、统一时间、统一标准、统一证书的考试办法。笔试安排在一天之内。 2022 年数据库系统工程

邓邓子的博客 3859

SWT游览器组件的例子

因为里面还有布局管理的代码,记录下来为后来参考 package com.swt; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEv

gongli109的专栏 634

硅电容的工艺结构原理及选型参数总结

硅电容,也称为硅质电容或硅二极管电容,是一种特殊的电容器。它利用硅二极管的结构来实现电容的功能。本文对硅电容的工作原理,结构特点,选型参数及设计注意事项进行总结。

fydar的博客 2328

081、空间降噪(Spatial Denoise)实战:双边滤波、非局部均值与BM3D在ISP中的调优

调参时,别只看PSNR/SSIM。找几个典型场景(夜景、人像、文字、天空),在真实设备上肉眼对比。我见过PSNR涨了2dB但图像看起来更差的案例——因为PSNR不惩罚纹理丢失。空间降噪这块,理论说再多,不如动手调一次。下次遇到噪点问题,先别急着上BM3D,试试双边滤波的自适应参数,说不定有惊喜。

zzfmlxs的博客 42

swt browser控件与java交互

1、java调用browser页面里的js final Browser browser = new Browser(shell, SWT.FILL_WINDING);

pan-zy的专栏 6933

手把手教你学 Simulink (1.3)--Simulink 的模块库及其模块介绍

Simulink 提供了丰富的模块库,涵盖了从基本的信号生成和处理到复杂的数学运算和系统建模的各种功能。通过熟悉这些模块库及其模块,你可以更高效地构建和仿真动态系统。

MHD0815的博客 5150

java swt browser_swt browser | 学步园

在许多平台中,Browser控件皆被作为一个必需的控件给出,并提供了DOM接口,用于访问Browser的内容,相对来说SWT中的Browser控件就比较薄弱,没有提供DOM的可控制接口,那么,如何和控件所加载的页面进行交互呢?比如需要在集成web应用的环境中实现模拟登陆、自动填表等功能。SWT中对Browser有不同的实现,目前实现的有IE和Mozilla。在Browser的构造函数中根据不同的平...

weixin_26968079的博客 552

PSM倾向性评分分析介绍、spss进行倾向性评分分析示例

PSM倾向性评分分析介绍、spss进行倾向性评分分析示例

statistics+insight+vista+power 1480

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

从 SWT Browser 迁移到 JxBrowser

本文介绍了如何将 SWT 的 Browser 组件迁移至 JxBrowser,提供了依赖配置方法和详细代码示例。JxBrowser 基于 Chromium,支持跨平台一致性与更强控制力,适用于需要精细化浏览器管理的 Java 应用。

TeamDev的博客 827

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java swt browser_使用java swt browser execute 遇到的问题

最近,写一个工具,用java swt 里面的Browser,org.eclipse.swt.browser.Browser.execute()方法,执行我的javascript文件当网页中1.2.第一种方式可以把值赋上去,第2种不行。为什么?有朋友之前遇到过的么?java调用代码public static void addProgressListener(final Map infoMap){Ob...

weixin_39590601的博客 514

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java集成原生SWT集成谷歌浏览器内核Chromium

一. 前言 假设你已经看过了 还在用SWT开发UI吗-用JCEF吧 终于, SWT官方支持Chromium了, 最新的4.17版本在2020年9月已经支持, 废话不多说, 我们来尝尝鲜吧! 二. SWT集成Chromium 建议大家可以去看看这个SWT FAQ, 上面有更详细的描述 1. 前期准备 (1) JDK 1.8+ 64 bit : 我使用的版本是JDK 1.8_144 64 bit. 目前SWt官方仅支持64bit的平台 (2) 依赖包: SWT-Chromium fragment

200+新能源动力电池研发测试生产售后项目上位机开发 2520

java swt browser,Java的SWT浏览器:等到动态页面完全加载

I'm working with SWT browser class and I have a problem. I'm trying to copy page source from a page in which most of the data is dynamically loaded with use of ASP. The problem is that the event compl...

weixin_36179103的博客 241

swt browser控件与java 与 js 交互

1、java调用browser页面里的js final Browser browser = new Browser(shell, SWT.FILL_WINDING); browser.evaluate("fun()");//fun是一个定义好的js函数 2、js中调用java函数 写一个类继承BrowserFunction类 import org.eclipse.swt.browser.Browser; import org.eclipse.swt.browser.BrowserFuncti

徐本锡的专栏 64万+

java 封装浏览器_JAVA浏览器实现方式

在使用 Java 开发客户端程序时,有时会需要在界面中使用网页浏览器组件,用来显示一段 HTML 或者一个特定的网址。本文将介绍在界面中使用浏览器组件的四种方法,给出示例的代码,并且分析每种方法的优点与不足,便于 Java 开发者在实际开发过程中根据自己的需要来选择。Swing 是一个用于开发 Java 应用程序图形化用户界面的工具包,它是以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任...

weixin_29463881的博客 1505

java SWT Browser 交互

最近在做swt ,写一个桌面应用,要与web界面交互,也就java与javascript通信   用到的控件是 org.eclipse.swt.browser.Browser   首先说下,java 怎么调用 javascript  browser.execute(arg0) arg0 里面写javascript脚本  browser.execu

legnedycq的专栏 2006

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

我想将WYSIWYGHTML编辑器添加到我的Java程序中.我的想法是做像this这样的事情但不是用python – 用Java.我知道几个选项及其问题:> HTMLEditorKit – 不够复杂.> JWebpane – 童话故事.> QtWebKit – 不是开源的.> JWebEngine – 不是开源的.> metaphaseeditor – 简单.>...

weixin_42117485的博客 429
上一篇: 如何利用python中的Jpype运行Java程序
下一篇: 关于python tkinter 多线程依然无响应问题
hacker_G
博客等级 码龄9年 75粉丝 60原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值