如何得到ie浏览器中,被选中文本中包含的链接(200分)

  • 主题发起人 主题发起人 whitelion
  • 开始时间 开始时间
W

whitelion

Unregistered / Unconfirmed
GUEST, unregistred user!
如果是得到全部链接,分析整个html文件就可以了
要是想得到选中部分的链接呢?
 
把选中部分盯住,在html中往前找 <href=>后的内容即可。
不会找我。
 
to tohappy
你的意思是不是用pos函数确实选中文档的位置
这样做的问题有两个:
1、如果选择部分的字体有多种,则在html文件中找不到对应的内容
2、如果有文字有重复,就会出错
 
to yaya8163,
能不能解释一下
 
使用接口IHtmlDocument2中的selection中的方法
createRange
Creates a TextRange object from the current text selection,
or a controlRange collection from a control selection.
 
to LiChaoHui,
我是说从ie浏览器中打开的网页,不是使用webbrowser打开的页面
 
你看一下FlashGet是怎么做的吧,
在他的目录下有两个vbs文件,
 
利用IeHelper来实现
编写一个com对象,在其setsite中ie将调用之,然后,用IHTMLDocument2的接口,
想干什么都可以了,源代码我稍后再贴出
 
谢谢manfeel
 
to:manfell
源代码什么时候贴出
 
to:manfell
源代码什么时候贴出:)
 
to:manfell
源代码什么时候贴出:)
 
to:manfell
源代码什么时候贴出:):):):)
 
如果也想像flashget那样在ie的右键菜单中显示一个下载选项的话
到注册表的
/HKEY_CURRENT_USER/software/microsoft/Internet Explorer/MenuExt/
看就知道是什么一回事啦
如果是自己写的程序用webbrowser想实现这种链接列表
//打开当前页面的所有链接
uses mshtml;
procedure Tfrmhtmlbrowser.N2Click(Sender: TObject);
var
OpenAllLinkForm: TOpenAllLinkForm;
Result: Integer;
doc: IHTMLDocument2;
all: IHTMLElementCollection;
len, i: integer;
item: OleVariant;
wb: tembeddedwb;
listitem: TListItem;
// j:Integer;
//iw: IWebBrowser2;
begin
WB := GetVisibleWebBrowser;
OpenAllLinkForm := TOpenAllLinkForm.Create(Self);
try
{判断是否多frame ,有时会出错,取消这功能
if wb.FrameCount > 0 then
for j := 0 to wb.framecount - 1 do
begin
iw := wb.GetFrame(j);
doc := iw.Document as IHTMLDocument2;
all := doc.Get_links; //doc.Links亦可
len := all.length;
for i := 0 to len - 1 do
begin
item := all.item(i, varempty); //EmpryParam亦可
if EnableIgnoreList then
if IgnoreList.IndexOf(item.href) = -1 then
begin
listitem := OpenAllLinkForm.ListView_link.Items.Add;
listitem.Caption := item.href;
listitem.SubItems.Add(item.innertext);
end;
end;
end
else
}
begin
//这段就是取链接
doc := wb.Document as IHTMLDocument2;
all := doc.Get_links; //doc.Links亦可
len := all.length;
for i := 0 to len - 1 do
begin
item := all.item(i, varempty); //EmpryParam亦可
if EnableIgnoreList then
if IgnoreList.IndexOf(item.href) = -1 then
begin
listitem := OpenAllLinkForm.ListView_link.Items.Add;
listitem.Caption := item.href;
listitem.SubItems.Add(item.innertext);
end;
end; //end for
//取链接结束
//open openalllinkform
Result := OpenAllLinkForm.Showmodal;
if Result = mrOk then //打开链接
for i := 0 to OpenAllLinkForm.ListView_link.Items.Count - 1 do
begin
application.ProcessMessages;
if OpenAllLinkForm.ListView_link.Items.Checked then
if BackList.IndexOf(OpenAllLinkForm.Listview_link.Items.Caption) = -1 then
newpages(OpenAllLinkForm.Listview_link.Items.Caption);
end;
end;
finally
OpenAllLinkForm.Free;
end;
end;

如果也想像flashget那样在ie的右键菜单中显示一个下载选项的话
到注册表的
/HKEY_CURRENT_USER/software/microsoft/Internet Explorer/MenuExt/
看就知道是什么一回事啦
你看注册表没有,其实就是2个htm文件,在文件中就是做取出链接,并加入到你应用程序的
列表中。netants和flashget的htm文件其实内容差不多的。
netants 取所有链接的htm
<script language="VBScript">

On Error Resume Next
set NetAntsApi = CreateObject( "NetAnts.API" ) //如果也想像netants那样,你要把自己的程序注册成com才行
if err<>0 then
Alert("NetAnts not properly installed on this PC!")
else
set links = external.menuArguments.document.links
ReDim params(links.length*2)
params(0)=external.menuArguments.document.Url
for i = 0 to links.length-1
params(i*2+1)=links(i).href
params(i*2+2)=links(i).innerText
next
NetAntsApi.AddUrlList params //加链接到应用程序的列表框或者其它中
end if
</script>


 
后退
顶部