- 浏览: 470073 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (135)
- javascript (43)
- struts (3)
- webWork (0)
- hibernate (2)
- EJB (0)
- Spring (2)
- XML (2)
- Oracle (4)
- Mysql (0)
- C (0)
- C++ (0)
- 网络 (0)
- linux (4)
- java (28)
- 设计模式 (0)
- java 代理模式 (2)
- jsp&Servlet (2)
- Tomcat (5)
- 算法设计 (2)
- 操作技巧 (1)
- HTML (5)
- Ajax (2)
- JScript Deviations from ES3 (14)
- Eclipse (1)
- log4J (2)
- ant (1)
- HTTP (4)
- project (1)
- SqlServer (4)
- 数据仓库 (0)
最新评论
-
u012526168:
header的域名是大小写敏感的.http://stackov ...
HTTP 请求报头详解 -
junes_yu:
这样的方法有问题哦正确方法如下:document.onkeyd ...
javascript 屏蔽F5,BackSpace,IE的刷新,右键功能 -
xunke515:
第二个,如果要带顺序的话,new个treeset也可以吧.
两种方法删除ArrayList里重复元素 -
bangyulin:
java 潜拷贝和深拷贝 -
hecongqi:
谢谢,写得很好,学到知识了
浅谈Java代理机制
需求
遍历当前打开的IE实例,分别获取IE浏览器中打开文档的一个节点值,调用IE内容中的一个javascript函数。
分析
Java直接控制IE浏览器,有点麻烦。只有通过VC来实现,生成一个dll文件,Java通过JNI调用。
实现:
1、准备工作:该工程采用的原理是通过和IE对象的接口的交互来实现对IE的访问,实际上是采用COM的技术。所以需要在vc工程中加入对COM的支持:
2、用VC实现对当前IE实例的进行遍历的方法,通过ShellWindows集合来代表属于shell的当前打开的窗口的集合,而IE就是属于shell的一个应用程序。
3、获取IE浏览器中打开文档的一个节点值
4、调用IE内容中的一个javascript函数
5、编译生成dll文件,供Java通过JNI调用
注意事项
1、可能Java通过JNI调用的时候,会报异常,可能是因为没有释放一些资源包括IDispatch、IHTMLElementCollection、IHTMLElement等。c++不会像java那样垃圾自动回收,需要手动释放。
2、首先需要调用CoInitialize(NULL),因为在调用任何COM函数之前,需要一个线程去调用CoInitialize(NULL)来加载COM组件,这样就可以自由地调用COM的,不过不要忘记CoUninitialize()哦!
遍历当前打开的IE实例,分别获取IE浏览器中打开文档的一个节点值,调用IE内容中的一个javascript函数。
分析
Java直接控制IE浏览器,有点麻烦。只有通过VC来实现,生成一个dll文件,Java通过JNI调用。
实现:
1、准备工作:该工程采用的原理是通过和IE对象的接口的交互来实现对IE的访问,实际上是采用COM的技术。所以需要在vc工程中加入对COM的支持:
#import <shdocvw.dll> #import <mshtml.tlb> // Internet Explorer 5 #include <atlbase.h> CComModule _Module;// 由于要使用 CComDispatchDriver ATL的智能指针, // 所以声明它是必须的 #include <mshtml.h> // 所有 IHTMLxxxx 的接口声明 #include <atlcom.h>
2、用VC实现对当前IE实例的进行遍历的方法,通过ShellWindows集合来代表属于shell的当前打开的窗口的集合,而IE就是属于shell的一个应用程序。
CoInitialize(NULL);//初始化COM CComPtr< IShellWindows > spShellWin; HRESULT hr = spShellWin.CoCreateInstance( CLSID_ShellWindows ); if ( FAILED ( hr ) ) { return; } long nCount = 0; spShellWin->get_Count( &nCount );// 取得浏览器实例个Explorer //和 IExplorer) if( 0 == nCount ) { return; } for(int i=0; i<nCount; i++) { CComPtr< IDispatch > spDispIE; hr=spShellWin->Item(CComVariant( (long)i ), &spDispIE ); if ( FAILED ( hr ) ) continue; CComQIPtr< IWebBrowser2 > spBrowser = spDispIE; if ( !spBrowser ) continue; CComPtr < IDispatch > spDispDoc; hr = spBrowser->get_Document( &spDispDoc );//判断实例 //对象是不是属于IE浏览器对象 if ( FAILED ( hr ) ) continue; ComQIPtr< IHTMLDocument2 > spDocument2 = spDispDoc; if ( !spDocument2 ) continue; // 程序运行到此,已经找到了 IHTMLDocument2 的接口指针 } CoUninitialize();//release COM
3、获取IE浏览器中打开文档的一个节点值
HRESULT hr; CComBSTR bstrTitle; CComPtr<IHTMLElementCollection> pElementCol; VARIANT id, index; CComPtr<IHTMLElement> pElement; pIHTMLDocument2->get_title( &bstrTitle ); //取得文档标题 if (SUCCEEDED(pIHTMLDocument2->get_all(&pElementCol))) { long p=0; if(SUCCEEDED(pElementCol->get_length(&p))) if(p!=0) { // AfxMessageBox("1"); for(long i=0;i<=(p-1);i++) { V_VT(&id) = VT_I4; V_I4(&id) = i; V_VT(&index) = VT_I4; V_I4(&index) = 0; if(SUCCEEDED(pElementCol->item(id,index, &spDispatch))) { if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLElement,(void**)&pElement))) { CComBSTR value; CComBSTR type; pElement->get_outerText(&value); pElement->get_tagName(&type); CString str(value); CString str2(type); if(str == "百度一下,你就知道") AfxMessageBox(str); if(str2 == "BROWERID") AfxMessageBox(str2); } } } } }
4、调用IE内容中的一个javascript函数
HRESULT ExecJavascript(CString strJsFunctionName_In, const CArray <VARIANT, VARIANT&> &pArrVARIANT_Params) { //前提是你已经取得了IHTMLDocument2 CComPtr <IDispatch> pScript; hResult = m_IHTMLDocument2-> get_Script(&pScript); if(FAILED(hResult)) { return FALSE; } CComBSTR pCComBSTR(strJsFunctionName_In); DISPID pDISPID; hResult = pScript-> GetIDsOfNames(IID_NULL, &pCComBSTR, 1, LOCALE_SYSTEM_DEFAULT, &pDISPID); if(FAILED(hResult)) { return FALSE; } //(3)Add Parameters DISPPARAMS pDISPPARAMS; memset(&pDISPPARAMS, 0, sizeof(pDISPPARAMS)); int intArgsCount_In = pArrVARIANT_Params.GetSize(); VARIANT* vParams = new VARIANT[intArgsCount_In]; for( int i = 0; i < intArgsCount_In; i++) { vParams[i] = pArrVARIANT_Params.GetAt(i); } //Params Count pDISPPARAMS.cArgs = intArgsCount_In; //Params Array pDISPPARAMS.rgvarg = vParams; //Name Args Count pDISPPARAMS.cNamedArgs = 0; //(4)Invoke Javascript Method EXCEPINFO pEXCEPINFO; memset(&pEXCEPINFO, 0, sizeof(pEXCEPINFO)); CComVariant pCComVariant; //Initialize to invalid arg UINT nintArgErr = (UINT)-1; hResult = pScript-> Invoke (pDISPID, IID_NULL, 0, DISPATCH_METHOD, &pDISPPARAMS, &pCComVariant, &pEXCEPINFO, &nintArgErr); delete[] pDISPPARAMS.rgvarg; pScript.Release(); if(FAILED(hResult)) { return FALSE; } return TRUE; }
5、编译生成dll文件,供Java通过JNI调用
注意事项
1、可能Java通过JNI调用的时候,会报异常,可能是因为没有释放一些资源包括IDispatch、IHTMLElementCollection、IHTMLElement等。c++不会像java那样垃圾自动回收,需要手动释放。
2、首先需要调用CoInitialize(NULL),因为在调用任何COM函数之前,需要一个线程去调用CoInitialize(NULL)来加载COM组件,这样就可以自由地调用COM的,不过不要忘记CoUninitialize()哦!
发表评论
-
java script 知识
2008-11-24 08:59 1565在IE地址栏中输入以下回车: 第一组: javascri ... -
javascript: window.close() 不弹确认框
2008-10-14 10:40 40061.solution window.opener ... -
document.execCommand()函数可用参数
2008-10-07 09:01 4555<HTML> <HEAD&g ... -
checkbox 隐藏的特殊性
2008-08-11 10:32 2331/*checkbox 的hidden=true属性不能使其隐藏 ... -
javascript 字符串链接效率解决办法
2008-08-01 16:39 1762<html> <head> ... -
事件设计模式
2008-07-11 16:24 18781. 事件设计概述 事件机制可以是程序逻辑更加清晰 ... -
js 去掉前后的空格
2008-07-10 18:09 3175function trim(s) { try ... -
JavaScript Object Notation 学习1 (转贴)
2008-07-02 21:01 1632JSON (JavaScript Objec ... -
javascript---类的构建
2008-07-01 21:30 11661.构造方式定义类,优点:多个实例对象不共享类的属性值,缺点: ... -
javascript---类的继承
2008-07-01 21:22 10671.第一种方式,冒充对象的方式.(利用js里的每一个方法名都是 ... -
java script 小技巧(转贴)
2008-07-01 15:38 2078因为这两篇太安逸了,东西很多,很实用,所以转到我格子里! 总 ... -
javascript 类定义4种方法
2008-07-01 13:49 4843/* 工厂方式--- 创建并返回特定类型的对象的 ... -
体会javascript
2008-06-29 17:51 1309没有类 object就是对象的类型。在JavaScr ... -
java script 刷新页面(转贴alert(平淡中搜询我的快乐)永久域名 http://al)
2008-06-29 17:07 3326用iframe、弹出子页面刷新父页面iframe <s ... -
JavaScript日志框架(转贴)
2008-06-29 16:55 1810log4javascript是一个基于log4j的JavaSc ... -
java script 读取xml (转贴)
2008-06-29 16:37 2133首先:xml文件(tree.xml)内容如下: <?x ... -
用js 调用EXE
2008-06-25 20:37 4955<SCRIPT language="Java ... -
ECMA JavaScript introduction
2008-06-24 17:27 1285Numbers in JavaScript are " ... -
Wscript.Shell 对象详细介绍
2008-06-24 17:08 3753WshShell 对象 ProgID Wscript.Shel ... -
注意java script 陷阱
2008-06-23 19:30 1306以下是JavaScript容易犯错的几个"陷阱&qu ...
相关推荐
本文将详细介绍如何利用JavaScript与Java Applet之间的交互来获取用户在Internet Explorer(IE)浏览器中的IP地址。 #### Java Applet简介 Java Applet是一种小型的Java应用程序,可以在网页上运行,由Java编写的...
在这个场景中,DLL文件可能是用于直接与Windows API交互,更改IE代理设置的本地代码实现。将它放在"jdk/bin"目录下,是因为这是Java默认寻找本地库的路径之一,使得Java程序能够找到并加载这个库。 实现Java操作IE...
总结来说,Java调用IE内核主要涉及Java与ActiveX控件的交互,这一技术虽然有一定的历史背景,但在现代Web开发中已经较少使用,更多的现代解决方案倾向于使用标准Web技术或者基于Chromium的框架。理解和学习这个知识...
首先,`java.lang.Runtime`类是Java平台的标准API,它可以提供与操作系统交互的能力。调用浏览器的一个基本方法是通过`Runtime.exec()`方法执行系统命令。例如,如果要打开IE浏览器并加载特定的URL,可以这样做: `...
3. **网络编程**:Java的`java.net`包提供了进行网络通信的基础,包括HTTP协议的实现,这对于浏览器来说至关重要,因为它需要通过HTTP或HTTPS协议与Web服务器交互,获取和发送数据。 4. **HTML和JavaScript解析**:...
- **JNI (Java Native Interface)**: 由于Java本身并不直接支持IE内核,开发者可能使用JNI来调用C++或C代码,这些代码可以与IE的ActiveX控件交互,从而在Java应用中嵌入IE的网页渲染能力。 - **Webkit or ...
标题“MINI-IE.rar_java与ie”暗示我们讨论的主题是关于一个小型的浏览器实现,它可能基于Java技术并与Internet Explorer(IE)有关。描述提到这个小型浏览器用于实现服务器与客户端之间的通信,这通常涉及网络编程...
Java在IE中下载并安装根证书是一个常见的网络安全配置步骤,主要应用于验证服务器的身份,确保数据传输的安全性。在这个过程中,根证书(Root Agency.cer)是信任链的基础,它代表了一个权威的证书颁发机构(CA),...
描述中提到"内嵌浏览器,java实现,Chrome和IE,功能强大可以直接使用",这表明该库已经实现了与这两个浏览器引擎的接口,开发者可以方便地将其集成到自己的Java项目中,而无需关心底层复杂的浏览器渲染和交互逻辑。...
在Java程序中嵌入Internet Explorer(IE)是一种常见的需求,特别是在需要在应用程序内部展示网页内容或者与Web服务交互时。...通过这些步骤,开发者可以创建一个包含内嵌IE浏览器的Java应用程序,实现与Web的交互。
3. **兼容性**: PageOffice组件兼容各种主流浏览器,如Chrome、Firefox、IE等,同时也支持多种Java应用服务器,如Tomcat、WebLogic、Jboss等。这意味着开发者可以在各种环境下灵活部署和使用。 4. **API与接口**: ...
【JAVA仿IE浏览器源码】项目是一个基于Java技术实现的简单网络浏览器,旨在为开发者提供一个基础框架,以便于在该基础上进行二次开发和功能扩展。这个项目充分展示了Java语言在构建桌面应用上的能力,尤其是GUI...
此外,IE浏览器必须设置为默认浏览器,因为Selenium可能无法与非默认浏览器正确交互。 总结来说,配置Selenium(Java IE)涉及以下几个步骤:安装JDK,下载并配置IEDriverServer,设置系统环境变量,导入Selenium库...
Java版本的仿IE下载是一种利用Java技术实现的网络下载工具,它模仿了Internet Explorer浏览器的下载功能,提供了用户友好的图形界面。这个项目基于J2EE(Java 2 Enterprise Edition)框架,使得它具备了服务器端处理...
结合“ie java_ie”的标签,我们可以推测这个项目可能是用Java语言来实现的,并且与IE浏览器有某种交互。Java是一种跨平台的编程语言,非常适合开发桌面应用程序,包括浏览器模拟器。可能开发者利用Java的Swing或...
Java并不直接支持对注册表的操作,但我们可以借助于第三方库,如JNA(Java Native Access)或者JReg,它们提供了与操作系统底层交互的能力。 1. 使用JNA: JNA允许Java代码直接调用操作系统API,包括访问注册表。...
本项目“Flash和jsp,Flash和Java交互的web project”旨在演示和实现这些技术间的协同工作,为用户提供更丰富的交互体验。 Flash是一种由Adobe公司开发的多媒体创作工具,它用于创建动画、图形、视频以及交互式内容...
总的来说,"Cell插件IE&JAVA开发示例"这个主题涵盖了一系列技术,包括了浏览器插件开发、Java客户端编程、Web表格应用设计以及与服务器的通信。对于希望提升Web应用功能或者维护旧有系统的开发者来说,这是一个非常...
### 用JAVA实现博客系统的设计 #### 概述 随着Web技术的发展以及用户对网络服务需求的提升,基于JAVA开发的博客系统成为了满足用户个性化需求的重要工具。本文旨在通过介绍如何利用JAVA语言来构建一个博客系统,...