IE内核的浏览器中,js嵌入比较方便,只要通过函数execScript就可以在网页中插入JS代码,然后进一步进行操作。
本例通过提取搜索结果中的URL,发现 Google 和 baidu 指向同一个地址,则提取出来。对有效的搜索结果还可以加以记录,以便以后再有同样的搜索就能先找到之前搜集的有效结果,大大提高搜索效率。
下图一目了然地展示了其中的功能
不过,这些方便简单的功能要编写代码也着实花去不少功夫。
首先看看“此链接对于搜索有效”这个按钮怎插入到搜索结果中的:
(主体程序(即IE内核浏览器调用msscript.ocx)所用的js脚本和网页中的js脚本是两码事,这两个不同环境的脚本的变量和函数都是独立的,这一点在阅读的时候务必记住。网页的脚本的变量和函数在页面重新请求时就会消失,而使用msscript.ocx的IE内核浏览器中的js脚本则一直不发生变化。)
以 Google 为例
}
下面是搜索下一页的代码
}
}
当点击“此链接对于搜索有效”这个按钮的消息响应则是这段代码,它向数据库中的 LikeUrl 表插入一条记录:
function OnLike(url,keyword_text)
{
q="INSERT INTO LikeUrl(key_text,url,short_desc)VALUES('"+keyword_text+"','"+url+"','')";
db2.query(q);
//重新刷新列表
RefreshList();
}
有4个对象需要说明一下:
1 dvm
这是根对象,下面的对象都通过这个对象展开,例如System对象是System=dvm.GetSharedObject("System");得到的,JavaScriptHelper对象是通过JavaScriptHelper=dvm.GetSharedObject('JavaScriptHelper').GetCodeObject();得到的。
2 System
这个对象是主体EXE程序的对系那个,它早从EXE程序相关内容,例如System.Exit()就是退出,更多操作可以参照这个主体EXE程序的VC代码。
3 JavaScriptHelper
这个对象操纵msscript.ocx,他可以让网页中的js代码调用ocx中的js函数。
4 MiniBrowser
这个是建议浏览器的类,用它可以创建n可浏览窗口。MiniBrowser::InvokeFunction可以让ocx的js代码调用网页中的函数。
}
}
//纯网页二次处理http://markmail.org/message/ir2v2mwpwta27xgz#query:js%20new%20function+page:2+mid:ir2v2mwpwta27xgz+state:message
其中想说明的一点是,多个IE内核浏览器同时浏览的时候容易出现假死,而只要在繁重的JS计算代码中插入若干Sleep(0)让出处理机,则可防止90%以上的假死,不过使用过程中存在短暂时间不能动,不过大部分它会活过来的。Sleep(0)调用的是Windows API。下面是字符串替换函数,这是本例js计算最繁重的部分:如果用
}
不使用上述函数,而使用下面这个就极其容易假死:
function xmlencode(string) {
return string.replace(/\&/g,'&'+'amp;').replace(/</g,'&'+'lt;')
.replace(/>/g,'&'+'gt;').replace(/\'/g,'&'+'apos;').replace(/\"/g,'&'+'quot;');
}
【后记】google 和 baidu 已经很不错了,通过这2者相同的URL提取,则更加大大的提高准确性,不妨下一个玩玩吧
点击这里仅下载本例代码,下载后的.dwidget改名.zip文件解压即可
点击这里下载整个运行程序
点击这里下载这个IE内核浏览器源代码(不含msscript.ocx调用机制部分源代码,这部分是DLL形式提供的)