Sub OnContextMenu()
On Error Resume Next
set srcEvent = external.menuArguments.event
set EventElement = external.menuArguments.document.elementFromPoint(srcEvent.clientX, srcEvent.clientY)
set objNetSamp=CreateObject("IEContextMenu.IEMenu1")
if srcEvent.type = "MenuExtAnchor" then
set srcAnchor = EventElement
do until TypeName(srcAnchor)="HTMLAnchorElement"
set srcAnchor=srcAnchor.parentElement
Loop
Call objNetSamp.AddUrl(srcAnchor.href,srcAnchor.innerText)
elseif srcEvent.type="MenuExtImage" then
if TypeName(EventElement)="HTMLAreaElement" then
Call objNetSamp.AddUrl(EventElement.href,EventElement.Alt)
else
set srcImage = EventElement
set srcAnchor = srcImage.parentElement
do until TypeName(srcAnchor)="HTMLAnchorElement"
set srcAnchor=srcAnchor.parentElement
if TypeName(srcAnchor)="Nothing" then
call objNetSamp.AddUrl(srcImage.href,srcImage.Alt)
exit sub
end if
Loop
Call objNetSamp.AddUrl(srcAnchor.href, srcImage.Alt)
end if
elseif srcEvent.type="MenuExtUnknown" then
set srcAnchor = EventElement
do until TypeName(srcAnchor)="HTMLAnchorElement"
set srcAnchor=srcAnchor.parentElement
if TypeName(srcAnchor)="Nothing" then
Call objNetSamp.AddUrl(EventElement.href,EventElement.innerText)
exit sub
end if
Loop
Call objNetSamp.AddUrl(srcAnchor.href,srcAnchor.innerText)
end if
end Sub
Sub OnContextMenu()
On Error Resume Next
set srcEvent = external.menuArguments.event
set EventElement = external.menuArguments.document.elementFromPoint(srcEvent.clientX, srcEvent.clientY)
set objNetSamp=CreateObject("IEContextMenu.IEMenu1")
if srcEvent.type = "MenuExtAnchor" then
set srcAnchor = EventElement
do until TypeName(srcAnchor)="HTMLAnchorElement"
set srcAnchor=srcAnchor.parentElement
Loop
Call objNetSamp.AddUrl(srcAnchor.href,srcAnchor.innerText)
elseif srcEvent.type="MenuExtImage" then
if TypeName(EventElement)="HTMLAreaElement" then
Call objNetSamp.AddUrl(EventElement.href,EventElement.Alt)
else
set srcImage = EventElement
set srcAnchor = srcImage.parentElement
do until TypeName(srcAnchor)="HTMLAnchorElement"
set srcAnchor=srcAnchor.parentElement
if TypeName(srcAnchor)="Nothing" then
call objNetSamp.AddUrl(srcImage.href,srcImage.Alt)
exit sub
end if
Loop
Call objNetSamp.AddUrl(srcAnchor.href, srcImage.Alt)
end if
elseif srcEvent.type="MenuExtUnknown" then
set srcAnchor = EventElement
do until TypeName(srcAnchor)="HTMLAnchorElement"
set srcAnchor=srcAnchor.parentElement
if TypeName(srcAnchor)="Nothing" then
Call objNetSamp.AddUrl(EventElement.href,EventElement.innerText)
exit sub
end if
Loop
end if
end Sub
call OnContextMenu()
</script>
将文件保存到c:\program files 下,文件名为 geturl.htm
从上面的脚本可以看到,首先访问external.menuArguments属性,获得用户单击鼠标右键位置的对象,然
后根据对象的不同获得它的URL,然后建立IEContextMenu.IEMenu1对象并调用该对象的AddURL方法。
接下来是为右键菜单建立注册项,打开UltraEdit(或者其它文本编辑器)将下面的注册数据输入编辑器中
Windows Registry Editor Version 5.00
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[i].Checked then
if BackList.IndexOf(OpenAllLinkForm.Listview_link.Items[i].Caption) = -1 then
newpages(OpenAllLinkForm.Listview_link.Items[i].Caption);
end;
end;
finally
OpenAllLinkForm.Free;
end;
end;