[C#]讓Webbrowser中的js直接呼叫Winform的 方法

在Winform中內嵌Webbrowser想來也是一個很普遍的功能吧,一般我們在Winfrom中內嵌Webbrowser的使用大概也分不開幾種吧:

1.內嵌網頁View

2.擷取網頁內容做處理

3....

不過今天我們聽到一個很有趣的需求,使用者希望,當點選網頁上的某個按鈕後,要在client執行某個winform系統,通常我們在純Webform上聽到這個需求,都會覺得有些許荒謬,叫Webform去叫Winform程式?應該是搞錯了吧?難道又要我使用很不想使用的ActiveX嗎?沒有更簡單一點的方法了嗎?

後來想到我現在是個Winform的程式,不知道有沒有機會透過Webbrowser中內嵌的Web form,透過javascript來呼叫我的Winform程式,然後由Winform程式來呼叫我client端的Winform程式呢?搜尋了一下,找到這篇:WinForm透過WebBrowser與JavaScript溝通

看了一下總覺得他的方法太過複雜,我就想起之前我們組有個小工具好像有類似的功能,翻了一下它的說明文件,酷喔,還真的有這樣的功能呢?看了一下它code的寫法,一整個簡潔,只要作些簡單設定就好了,下面我們先來看一下它如何達成我們以上的功能:

先在Winform程式中拉一個Webbrowser元件,並將Url指定到某個網頁:

image

接著在Winform程式中先寫一個簡單的function叫justMessageBox準備保留讓javascript呼叫:

1public void justMessageBox(string pMessage)
2{
3    MessageBox.Show(pMessage);
4}

接著到我目標的網頁去,我只有放一個button,這個button按下去後會透過window.external去呼叫我剛剛在Winform中寫好的justMessageBox function:

image

好了,這樣應該可以使用了吧,按下建置-->執行,網頁載入完成後,我按下Button1,結果卻出現這個錯誤訊息:

image

window.external竟然是null,我應該是漏了什麼步驟吧,又檢查了一下,發現人家程式中有用到一個Webbrowser的隱藏屬性,這個屬性在屬性視窗中是看不到的,趕快在我的建構函式中加入這一行:

1webBrowser1.ObjectForScripting = this;

這個屬性蠻少用到的,我們參考一下MSDN的說明:http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx

image

不過它網頁提到,除了上頭那個屬性設定外,也需要在class的屬性上多加上這兩行:

1[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
2[System.Runtime.InteropServices.ComVisibleAttribute(true)]

PermissionSet這部分或許我們在之後的應用程式安全中可再多做說明,而在此處我們先設為FullTrust,代表完全信任;而ComVisibleAttribute這個屬性主要是在設定這個class或者assembly是否為COM可見的型別,如果我把這一行拿掉,我們程式執行時會出現這樣的錯誤:

image

當我們做完以上的工作後,再次執行程式,讓人振奮的,我希望的結果出現了,我透過javascript呼叫到我Winform程式中的justMessgeBox function:

image

接著我再改一下我要做的事情,我寫這樣,嘗試由Webbrowser中要Winform去幫我叫起client端的notepad,執行的結果也是OK的。

 

1public void justMessageBox(string pMessage)
2{
3    Process tProc = new Process();
4    tProc.StartInfo.FileName = "notepad.exe";
5    tProc.Start();
6}

試出來的做法比前面找到的那篇來的簡單,自己玩了一下也還沒有遇到太特別的問題,這個功能對MSN這類型的小工具實在是一項利器,太棒了,這邊分享給各位。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值