2015-02-11 37 views
2

我在我的web服務器上有一個aspx頁面,我通過windows窗體上的嵌入式web瀏覽器加載。我可以從javascript window.external過程調用Sub1。這隻有在使用標準的VB控件WebBrowser的時候。我有必要的權限使用window.external.Sub1()從嵌入式GeckoWebBrowser調用VB Sub;

<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _ 
<System.Runtime.InteropServices.ComVisibleAttribute(True)> _ 

這工作得很好。但是,我需要使用GeckoFx,因爲我的JavaScript對於標準的WebBrowser以及我的樣式來說太複雜了。 我都試過,一樣的方法是,剛剛與geckobrowser,但它並沒有在所有的工作,有什麼:

GeckoPrefereces.User("somesetting") = True 

,我需要激活才能正常工作,或者有什麼別的我我錯過了?

我只想從嵌入在GeckoBrowserControl中的網頁中調用窗體窗體的「表單關閉」過程。

回答

2

請參考以下鏈接以獲取答案,因爲它在這裏解決。 How to call C# method in javascript by using GeckoFX as the wrapper of XULRunner

將此進程更改爲C#,因爲VB無法將消息發送到過程,只存儲該值,這會在稍後讀取數據時造成困難。

則:

private void showMessage(string s) 
{ 
    if (s == "some data") 
    { 
     //Do stuff here you need to, ie. close the form, etc 
    } 
} 

這使您可以讀取發送的消息,並用它做你想要什麼。 同樣重要:

browser.AddMessageEventListener("myFunction", ((string s) => this.showMessage(s))); 

您加載HTML或URL

myBrowser.Navigate("www.google.com"); 
+0

你是說用geckofx當VB只是平了無法從JS接收消息之前,必須先?因此,如果我們在VB項目中使用geckofx,並且在js中有一堆window.external調用,那我們需要將VB文件轉換爲C#?說它不是這樣! – whyoz 2015-02-26 02:31:10

+1

'=> this.showMessage(s)'的C#轉換,我一直無法在VB中複製,錯誤一直說s不能被賦值。我發現的唯一方法是將C#作爲項目添加到整個VB解決方案中,C#項目必須作爲類編譯,然後添加爲對VB項目的引用。然後可以從VB中調用它來打開C#winform,其中帶有Geckofxbrowser。這個方法解決了我的問題,因爲我放棄了試圖讓它在VB中工作。 – Killua 2015-02-26 08:49:41

+0

@Killua和其他感興趣的人,投票支持geckofx中的ObjectForScripting可以在這裏找到:http://tinyurl.com/pqrkg3y ...似乎這將是geckofx與其他Chrome引擎競爭的一個很好的補充,支持和文檔與.NET的雙向通信 – whyoz 2015-02-26 18:02:31