Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Webbrowser控件处理javascript:弹出窗口_.net_Vb.net_Webbrowser Control - Fatal编程技术网

.net Webbrowser控件处理javascript:弹出窗口

.net Webbrowser控件处理javascript:弹出窗口,.net,vb.net,webbrowser-control,.net,Vb.net,Webbrowser Control,我的软件通过这个函数处理到target=\u new的导航 Private Sub Web1_NewWindow(...) Handles Web1.NewWindow Web1.Navigate(Web1.StatusText) e.Cancel = True End Sub 它允许我在同一webbrowser控件中打开任何新窗口。但是,当导航到创建新弹出窗口的“javascript:”链接时,我收到以下消息,因为它正试图导航到该页面: The requested resou

我的软件通过这个函数处理到target=\u new的导航

Private Sub Web1_NewWindow(...) Handles Web1.NewWindow
    Web1.Navigate(Web1.StatusText)
    e.Cancel = True
End Sub
它允许我在同一webbrowser控件中打开任何新窗口。但是,当导航到创建新弹出窗口的“javascript:”链接时,我收到以下消息,因为它正试图导航到该页面:

The requested resource is in use. (Exception from HRESULT: 0x800700AA)
如何在webbrowser控件中打开javascript弹出窗口

链接如下所示:

javascript:Dpy.ITQPopup('100',255,'2932 NTYwNDUwMTA0MDYzMDM);3094 V0FZ','-357933312',0,0)

根据
javascript:
链接中的具体内容,它可能工作,也可能不工作。例如:

<body>

<!-- These work -->

<a href="http://www.example.com" target="_blank">Test 0</a><br>
<a href="javascript:navigate('http://www.example.com')" target="_blank">Test 1</a><br>
<a href="javascript:'<b>hello</b> from new page!'" target="_blank">Test 2</a><br>
<a href="javascript:''" target="_blank">Test 3</a><br>
<a href="javascript:TestFunc()" target="_blank">Test 4</a><br>

<!-- This does not work -->

<a href="javascript:open('http://www.example.com')" target="_blank">Test 5</a><br>


<script>
function TestFunc()
{
    return "<b>TestFunc</b> result.";
}
</script>

</body>
现在,如果您真的需要让测试5起作用,那么它仍然是可能的。它的问题是实际上有两个导航,第二个是嵌套的,这可能是错误的原因
0x800700AA
。诀窍是首先从
NewWindow
事件返回,然后执行导航:

private void Form1_Load(object sender, EventArgs e)
{
    // this code depends on SHDocVw.dll COM interop assembly,
    // generate SHDocVw.dll: "tlbimp.exe ieframe.dll",
    // and add as a reference to the project

    var activex = (SHDocVw.WebBrowser_V1)this.webBrowser.ActiveXInstance;

    activex.NewWindow += delegate(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
    {
        Processed = true;
        object flags = Flags;
        object targetFrame = Type.Missing;
        object postData = PostData != null ? PostData : Type.Missing;
        object headers = !String.IsNullOrEmpty(Headers) ? Headers.ToString() : Type.Missing;
        SynchronizationContext.Current.Post(delegate
        {
            activex.Navigate(URL, ref flags, ref targetFrame, ref postData, ref headers);
        }, null);
    };

    this.webBrowser.Navigate("http://localhost:81/new-window-test.html");
}
用IE10测试

[更新]

尝试以下方法(已验证):


这是不可能的。自动化界面只能处理弹出窗口,不能处理Javascript alert()聊天。最好找到一种方法来避免那个可怕的错误消息,我想说,把它放在一个友好的窗口不会让用户更高兴。嘿,汉斯,我说的不是javascript:alert(),我说的是一个新窗口,它是通过点击链接“javascript:function(xyz)”由脚本创建的。同样的问题。在我最喜欢的浏览器的“在新选项卡中打开链接”上下文菜单项中也可以使用。不是。如果我实现了标签呢?我添加了原始帖子的链接,也许你可以帮我确定它是否是测试5。
itqpoup(…)
是否返回任何内容?它是否在内部调用了
window.open
?我刚刚跟踪了函数,是的,调用了window.open!那么是的,在我的测试中是这样的#5,因为
窗口。打开
。我用一些VB.NET代码更新了答案,试一试。你,我的朋友,是一位老板,非常感谢你——对于其他实现这一点的人,请确保!!!!WebBrowser控件没有
NewWindow
事件,因为它优先于
ActiveX.NewWindow
事件。
private void Form1_Load(object sender, EventArgs e)
{
    // this code depends on SHDocVw.dll COM interop assembly,
    // generate SHDocVw.dll: "tlbimp.exe ieframe.dll",
    // and add as a reference to the project

    var activex = (SHDocVw.WebBrowser_V1)this.webBrowser.ActiveXInstance;

    activex.NewWindow += delegate(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
    {
        Processed = true;
        object flags = Flags;
        object targetFrame = Type.Missing;
        object postData = PostData != null ? PostData : Type.Missing;
        object headers = !String.IsNullOrEmpty(Headers) ? Headers.ToString() : Type.Missing;
        SynchronizationContext.Current.Post(delegate
        {
            activex.Navigate(URL, ref flags, ref targetFrame, ref postData, ref headers);
        }, null);
    };

    this.webBrowser.Navigate("http://localhost:81/new-window-test.html");
}
Public Class Form1
    Dim ActiveX As SHDocVw.WebBrowser_V1

    Private Sub NavigateOnNewWindow(NewWindowUrl As Object)
        Me.ActiveX.Navigate(NewWindowUrl.ToString())
    End Sub

    Private Sub NewWindow(URL As String,
                          Flags As Integer,
                          TargetFrameName As String,
                          ByRef PostData As Object,
                          Headers As String,
                          ByRef Processed As Boolean)
        Processed = True
        System.Threading.SynchronizationContext.Current.Post(AddressOf NavigateOnNewWindow, URL)
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Init DocumentText, otherwise Me.WebBrowser1.ActiveXInstance is null, this is different from C#
        Me.WebBrowser1.DocumentText = String.Empty
        Me.ActiveX = Me.WebBrowser1.ActiveXInstance
        AddHandler Me.ActiveX.NewWindow, AddressOf NewWindow
        Me.WebBrowser1.Navigate("http://localhost:81/new-window-test.html")
    End Sub
End Class