分享:c#和javascript函數的相互調用(ObjectForScripting 的類必須對 COM 可見。請確認該對象是公共的,或考慮向您的類添加 ComVisible 屬性。)


     在webBrowser使用過程中為了C#和JS通訊,webBrowser必須設置ObjectForScripting的屬性,它是一個object,這個object可以提供給webBrowser控件載入的網頁上的script訪問

    在設置過webBrowser控件的ObjectForScripting屬性后,還需要設置應用程序對com可見,不然會拋出一個異常(ObjectForScripting 的類必須對 COM 可見。請確認該對象是公共的,或考慮向您的類添加 ComVisible 屬性。),可做如下設置:

[System.Runtime.InteropServices.ComVisible(true)]

例如:

[ComVisible(true)]
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnLoad(EventArgs e)
        {
            webBrowser1.ObjectForScripting = this;
            webBrowser1.Navigate("http://www.cnblogs.com/winzheng");
            base.OnLoad(e);
        }
    }

如果要和JS通訊,使用webBrowser的Document對象的InvokeScript方法即可。

該方法簽名如下:

InvokeScript(String spriteName,object[] args);

例如:

<scripttype="text/javascript">     //提供給c#調用的方法    
 function test(n,s){         
    alert(n+"/"+s);    
 }     //調用C#的方法     
function callCSharp(){         //這里可以看到window.external被設置成了什么        
 alert(window.external);        
 window.external.Test("hello",15);     
} 
</script>
<button onclick="callCSharp()">call c#</button>

調用:web.Document.InvokeScript("test", new Object[] {1,"hello"});

http://www.lwolf.cn/blog/article/code/WebBrowser-js-call-csharp.htm

http://blog.udnz.com/Article/Invoke_Members_Of_Winform_On_Webbrowser.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM