我想创建一个VBScript脚本来检测Internet Explorer的打开页面和在同一窗口中打开新选项卡。例如,当我通过www.google.com手动打开Internet Explorer时,VBScript将执行以下操作:
我尝试了以下代码:
Set wshShell = CreateObject("WScript.Shell")
Do
page1 = wshShell.AppActivate("Blank page - Internet Explorer")
If page1 = True Then
Set page2 = CreateObject("InternetExplorer.Application")
page2.Navigate "http://www.example.com", CLng(navOpenInNewTab)
End If
WScript.Sleep 500
Loop
答案 0 :(得分:0)
一方面,您必须使用现有的Internet Explorer实例,而不是创建一个新实例。不幸的是,人们可能期望能够做到的方式(GetObject(, "InternetExplorer.Application")
)对于Internet Explorer COM对象不起作用。 AppActivate
在这里也无济于事,因为它没有返回应用程序对象的句柄,您需要调用该句柄的方法。相反,您需要这样做:
Set app = CreateObject("Shell.Application")
For Each wnd In app.Windows
If InStr(1, wnd.FullName, "iexplore.exe", vbTextCompare) > 0 Then
Set ie = wnd
Exit For
End If
Next
如果要选择打开了特定页面的实例,则可以检查该页面的标题以进行选择:
wnd.Document.Title = "something"
或
InStr(1, wnd.Document.Title, "something", vbTextCompare) > 0
您的第二个问题是VBScript无法识别符号常量navOpenInNewTab
。您必须使用数值(在BrowserNavConstants
枚举中定义):
ie.Navigate "http://www.example.com", CLng(2048)
或首先自己定义常量:
Const navOpenInNewTab = &h0800&
ie.Navigate "http://www.example.com", navOpenInNewTab
请注意,您必须在此处使用带尾号“&”的十六进制表示法,因为该值必须为Long,并且必须在Const
定义中使用文字。诸如调用函数CLng
之类的表达式无效。
或者,您可以通过完全忽略Navigate
方法的第二个参数,而为第三个参数提供值"_blank"
来在新选项卡中打开URL:
ie.Navigate "http://www.example.com", , "_blank"
但是,我不确定这是否总是会在当前窗口中打开一个新标签页(可能取决于浏览器的标签页设置),因此,我建议如上所述使用第二个参数(标志)。