- 浏览: 464194 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1532在IE地址栏中输入以下回车: 第一组: javascri ... -
javascript: window.close() 不弹确认框
2008-10-14 10:40 39331.solution window.opener ... -
document.execCommand()函数可用参数
2008-10-07 09:01 4514<HTML> <HEAD&g ... -
checkbox 隐藏的特殊性
2008-08-11 10:32 2293/*checkbox 的hidden=true属性不能使其隐藏 ... -
javascript 字符串链接效率解决办法
2008-08-01 16:39 1727<html> <head> ... -
事件设计模式
2008-07-11 16:24 18321. 事件设计概述 事件机制可以是程序逻辑更加清晰 ... -
js 去掉前后的空格
2008-07-10 18:09 3134function trim(s) { try ... -
JavaScript Object Notation 学习1 (转贴)
2008-07-02 21:01 1604JSON (JavaScript Objec ... -
javascript---类的构建
2008-07-01 21:30 11361.构造方式定义类,优点:多个实例对象不共享类的属性值,缺点: ... -
javascript---类的继承
2008-07-01 21:22 10241.第一种方式,冒充对象的方式.(利用js里的每一个方法名都是 ... -
java script 小技巧(转贴)
2008-07-01 15:38 2046因为这两篇太安逸了,东西很多,很实用,所以转到我格子里! 总 ... -
javascript 类定义4种方法
2008-07-01 13:49 4796/* 工厂方式--- 创建并返回特定类型的对象的 ... -
体会javascript
2008-06-29 17:51 1274没有类 object就是对象的类型。在JavaScr ... -
java script 刷新页面(转贴alert(平淡中搜询我的快乐)永久域名 http://al)
2008-06-29 17:07 3247用iframe、弹出子页面刷新父页面iframe <s ... -
JavaScript日志框架(转贴)
2008-06-29 16:55 1764log4javascript是一个基于log4j的JavaSc ... -
java script 读取xml (转贴)
2008-06-29 16:37 2089首先:xml文件(tree.xml)内容如下: <?x ... -
用js 调用EXE
2008-06-25 20:37 4882<SCRIPT language="Java ... -
ECMA JavaScript introduction
2008-06-24 17:27 1239Numbers in JavaScript are " ... -
Wscript.Shell 对象详细介绍
2008-06-24 17:08 3687WshShell 对象 ProgID Wscript.Shel ... -
注意java script 陷阱
2008-06-23 19:30 1271以下是JavaScript容易犯错的几个"陷阱&qu ...
相关推荐
本文通过一个小例子演示了如何通过js与JavaApplet的交互来获取IE端的IP地址,体现了交互和调用。
Internet Explorer 11 将于 2022 年 6 月 15 日停用 Microsoft Edge 是唯一一款对旧版网站和应用具有内置兼容性的浏览器。 EDGE怎样兼容IE的网站访问,以下是切换方法 ...扩展(不支持与 IE 页面内容直接交互的扩展)
flash和jsp交互 flash和java交互的webproject,导入myeclipse中即可运行,
含有Applet的网页的HTML文件代码中部带有...在Java Applet中,可以实现图形绘制,字体和颜色控制,动画和声音的插入,人机交互及网络交流等功能。 Applet还提供了名为抽象窗口工具箱(Abstract Window Toolkit)
Java实现具有Web 链接功能的标签。窗体中就是一个Web 链接标签,单击此标签,可以打开IE(或其他浏览 器,但必须是系统默认的网页浏览器)并链接至指定的网址。主要是使用java.lang 包中的Runtime 类可以实现标签...
Java Applet是用Java语言编写的一些小应用程序,这些程序直接嵌入到网页中,由支持Java的浏览器(IE或Nescape)解释执行能够产生特殊效果。它可以大大提高Web页面的交互能力和动态执行能力。Java Applet与ASP等制作...
本文实例讲述了Android编程使用WebView实现与Javascript交互的方法。分享给大家供大家参考,具体如下: Android中可以使用WebView加载网页,同时Android端的Java代码可以与网页上的JavaScript代码之间相互调用。 ...
dwr, java ajax 应用框架,可以将Java对象直接export到ie客户端,成为javascript对象,非常方便js和服务器端的交互,如果你还没有用,就是一下。太方便了呀。
在IE,Servlet的环境下实验Ajax的一个小例子,初学者可看。工具为Eclipse,Tomcat
ECharts,一个纯Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可...
实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet ...聊天时需要使用,两台电脑,或者 分别使用 IE 与FF 浏览器测试,来模拟多个用户
实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet ...聊天时需要使用,两台电脑,或者 分别使用 IE 与FF 浏览器测试,来模拟多个用户
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示:mWebView.getSettings().setJavaScriptEnabled...
Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查,如不经编译则就无法实现对象引用的检查。JavaScript采用动态联编,即JavaScript的对象引用在运行时进行检查。
根据业主要求,网站兼容到chrome,FF,IE9+并使用响应式布局,由于网站主要是展示效果,实现结构、功能、样式三者分离,使用源生js,css2.0(一级页面中使用少量css3.0代码)完成。在项目开发过程中,使用正则表达式实现...
本文介绍了Java Servlet编程所需的软件及环境配置。...其作用类似于CGI程序,可以实现网页中很多交互式效果,但比CGI程序效率更高。Cookies是用户访问Web服务器时由Web服务器写入用户计算机特定目录的一小段信息
1. 哪个项目能离开网络,数据库,操作系统来运行?所以生态圈的应用技术主要在这些知识点处。 2. Java组件,组件其实是一个应用程序块 但是它们不是完整的...举个例子,IE发送了一个请求给容器,容器通过调用其中
为了方便网页和Android应用的交互,Android系统提供了WebView中JavaScript网页脚本调用Java类方法的机制。只要调用addJavascriptInterface方法即可映射一个Java对象到JavaScript对象上。 1、映射Java对象到...