您的位置:首页 > 编程语言 > C#

C# WinForm webBrowser 内嵌网页的按钮的OnClientClick事件的return false 在webBrowser中绑定onclick事件后 失效 的变通解决办法

2009-03-23 15:50 1271 查看
本示例主题基于如下情况:

网页有一按钮

<asp:Button ID="Button1" OnClientClick="return fnButton1();" runat="server" Text="Button" OnClick="Button1_Click" />

在正常情况下 下面的代码正常执行

<script language="javascript" type="text/javascript">

    function fnButton1()

    {

        if(confirm("是否继续执行?"))

        {

            return true;

        }

        else

        {

            return false;

        }           

    }

</script>

即confirm框 弹出后 根据用户的选择 可正常的继续执行或停止执行按钮的OnClick后台事件

但当该网页被WinForm通过webBrowser访问 并给该网页的Button1增加事件后

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

{

    if (this.webBrowser1.Document.All["Button1"] != null)

        this.webBrowser1.Document.All["Button1"].DetachEventHandler("onclientclick", new EventHandler(Html_Button1_Click));

}

void Html_Button1_Click(object sender, EventArgs e)

{

    //...

}

上面的confirm的选择是与否 都会继续执行后台代码及WinForm中的代码

经过相关尝试 可变通的通过如下判断来确定是否执行后台代码及WinForm中的代码

网页中增加多一个javascript函数

<script language="javascript" type="text/javascript">

    var IsSubmit = false;

    function fnButton1()

    {

        if(confirm("是否继续?"))

        {

            IsSubmit = true;

        }

        else

        {

            IsSubmit = false;

        }       

        return IsSubmit;   

    }

   

    function fnButton1ForWebBrowser()

    {

        return IsSubmit;       

    }

</script>

WinForm中增加多一步的相关判断

void Html_Button1_Click(object sender, EventArgs e)

{

    object result = this.webBrowser1.Document.InvokeScript("fnButton1ForWebBrowser");

    if (result.ToString().ToLower() == "true")

    {

        MessageBox.Show("执行");

        //...

    }

    else

    {

        MessageBox.Show("不执行");  

        //...        

    }

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐