Java SWT浏览器,在显示之前更改内容
在向用户显示之前,我想更改SWT浏览器的内容(用户定义的某些网页)。 当我说更改时,我的意思是在html代码中添加一些css/js文件 为此,我尝试使用ProgressListener(我使用getText()获取所有代码,进行一些更改并使用setText()方法应用),但发现在这种情况下,没有绝对路径定义的所有其他资源都不再可用 这是因为在setText()之后,浏览器将页面设置为大约:空白。所以,我有所有的代码,但是所有用相对路径定义的css/js/img都不再可用了 是否可以添加几行css/js定义,而不将没有相对路径的所有资源定义到loosJava SWT浏览器,在显示之前更改内容,java,browser,swt,Java,Browser,Swt,在向用户显示之前,我想更改SWT浏览器的内容(用户定义的某些网页)。 当我说更改时,我的意思是在html代码中添加一些css/js文件 为此,我尝试使用ProgressListener(我使用getText()获取所有代码,进行一些更改并使用setText()方法应用),但发现在这种情况下,没有绝对路径定义的所有其他资源都不再可用 这是因为在setText()之后,浏览器将页面设置为大约:空白。所以,我有所有的代码,但是所有用相对路径定义的css/js/img都不再可用了 是否可以添加几行css
提前谢谢 使用
getText
并修改它不是更改HTML内容的明智方法。我建议您使用org.eclipse.swt.browser.browser的execute()
方法。它允许您在页面的DOM对象上触发Java脚本
>示例
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class BrowserTest
{
private static Browser browser;
public static void main(String [] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
shell.setLayout(gridLayout);
createBrowser(shell);
browser.addProgressListener(new ProgressListener()
{
public void changed(ProgressEvent event) {
}
public void completed(ProgressEvent event) {
changeSomething();
}
});
shell.open();
browser.setUrl("http://google.com");
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
protected static void changeSomething()
{
String s = "var allLinks = document.getElementsByTagName('a'); " +
"for (var i=0, il=allLinks.length; i<il; i++) { " +
"elm = allLinks[i]; elm.style.border = 'thin solid red';" +
"}";
System.out.println(browser.execute(s));
}
private static void createBrowser(Shell shell)
{
ToolBar toolbar = new ToolBar(shell, SWT.NONE);
ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
itemGo.setText("Go");
GridData data = new GridData();
data.horizontalSpan = 3;
toolbar.setLayoutData(data);
Label labelAddress = new Label(shell, SWT.NONE);
labelAddress.setText("Address");
final Text location = new Text(shell, SWT.BORDER);
data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.horizontalSpan = 2;
data.grabExcessHorizontalSpace = true;
location.setLayoutData(data);
try {
browser = new Browser(shell, SWT.NONE);
} catch (SWTError e) {
System.out.println("Could not instantiate Browser: " + e.getMessage());
//display.dispose();
return;
}
data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.horizontalSpan = 3;
browser.setLayoutData(data);
/* event handling */
Listener listener = new Listener()
{
public void handleEvent(Event event)
{
ToolItem item = (ToolItem)event.widget;
String string = item.getText();
if (string.equals("Go")) browser.setUrl(location.getText());
}
};
browser.addLocationListener(new LocationListener() {
public void changed(LocationEvent event) {
if (event.top) location.setText(event.location);
}
public void changing(LocationEvent event) {
}
});
itemGo.addListener(SWT.Selection, listener);
location.addListener(SWT.DefaultSelection, new Listener() {
public void handleEvent(Event e) {
browser.setUrl(location.getText());
}
});
}
}
在此代码中,我允许页面完全加载,然后查找所有链接项,然后在其周围创建一个红色边框
>输出
>代码
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class BrowserTest
{
private static Browser browser;
public static void main(String [] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
shell.setLayout(gridLayout);
createBrowser(shell);
browser.addProgressListener(new ProgressListener()
{
public void changed(ProgressEvent event) {
}
public void completed(ProgressEvent event) {
changeSomething();
}
});
shell.open();
browser.setUrl("http://google.com");
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
protected static void changeSomething()
{
String s = "var allLinks = document.getElementsByTagName('a'); " +
"for (var i=0, il=allLinks.length; i<il; i++) { " +
"elm = allLinks[i]; elm.style.border = 'thin solid red';" +
"}";
System.out.println(browser.execute(s));
}
private static void createBrowser(Shell shell)
{
ToolBar toolbar = new ToolBar(shell, SWT.NONE);
ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
itemGo.setText("Go");
GridData data = new GridData();
data.horizontalSpan = 3;
toolbar.setLayoutData(data);
Label labelAddress = new Label(shell, SWT.NONE);
labelAddress.setText("Address");
final Text location = new Text(shell, SWT.BORDER);
data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.horizontalSpan = 2;
data.grabExcessHorizontalSpace = true;
location.setLayoutData(data);
try {
browser = new Browser(shell, SWT.NONE);
} catch (SWTError e) {
System.out.println("Could not instantiate Browser: " + e.getMessage());
//display.dispose();
return;
}
data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.horizontalSpan = 3;
browser.setLayoutData(data);
/* event handling */
Listener listener = new Listener()
{
public void handleEvent(Event event)
{
ToolItem item = (ToolItem)event.widget;
String string = item.getText();
if (string.equals("Go")) browser.setUrl(location.getText());
}
};
browser.addLocationListener(new LocationListener() {
public void changed(LocationEvent event) {
if (event.top) location.setText(event.location);
}
public void changing(LocationEvent event) {
}
});
itemGo.addListener(SWT.Selection, listener);
location.addListener(SWT.DefaultSelection, new Listener() {
public void handleEvent(Event e) {
browser.setUrl(location.getText());
}
});
}
}
import org.eclipse.swt.swt;
导入org.eclipse.swt.swt;
导入org.eclipse.swt.browser.browser;
导入org.eclipse.swt.browser.LocationEvent;
导入org.eclipse.swt.browser.LocationListener;
导入org.eclipse.swt.browser.ProgressEvent;
导入org.eclipse.swt.browser.ProgressListener;
导入org.eclipse.swt.layout.GridData;
导入org.eclipse.swt.layout.GridLayout;
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Event;
导入org.eclipse.swt.widgets.Label;
导入org.eclipse.swt.widgets.Listener;
导入org.eclipse.swt.widgets.Shell;
导入org.eclipse.swt.widgets.Text;
导入org.eclipse.swt.widgets.ToolBar;
导入org.eclipse.swt.widgets.ToolItem;
公共类浏览器测试
{
专用静态浏览器;
公共静态void main(字符串[]args)
{
显示=新显示();
最终外壳=新外壳(显示);
GridLayout=新的GridLayout();
gridLayout.numColumns=3;
shell.setLayout(gridLayout);
创建浏览器(shell);
browser.addProgressListener(新的ProgressListener()
{
公共无效已更改(ProgressEvent){
}
公共作废已完成(ProgressEvent){
改变某物();
}
});
shell.open();
browser.setUrl(“http://google.com");
而(!shell.isDisposed()){
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
受保护的静态void changeSomething()
{
String s=“var allLinks=document.getElementsByTagName('a')+
对于(var i=0,il=allLinks.length;i