2009-07-05 106 views
0

這將是一個通過ClickOnce部署的Windows窗體應用程序。 該計劃是使用WebBrowser控件來公開使用Active-X控件的Web應用程序。使用window.external和InvokeScript,這些對象將被對Reg-Free COM對象(SXS)的引用所替代。我知道這聽起來像一團糟,但它是一個較小的邪惡,我的時間表很緊。最終,SXS部分可以被替換,並希望服務器端代碼可以更好地更新。 這會有嚴重的性能問題嗎?我用這個要求多少麻煩?Mono和window.external

將.NET 2.0作爲目標,讓在Mono和.NET之間移植代碼更容易嗎? VB.NET代碼麻煩到Mono端口嗎?我假設它不應該是? (我正在與VB6程序員一起工作)。

文檔說,window.external在單聲道下不可用。這聽起來像有計劃實施這一點。現在只使用window.external並等待Mono實現它是否安全? 或者,有沒有辦法模擬這個?

我還有其他計劃可以讓代碼更加便於攜帶,而且我希望我可以使用它作爲一種方法(閱讀:漏洞)使之成爲可能。

如果您有關於態度和心態的建議,我也很樂意聽到他們。但請先嚐試回答我的主要問題。謝謝。

+1

請添加更多細節。當腳本在Windows Forms WebBrowser控件中運行時,爲了知道您在JavaScript中詢問「窗口」對象的「外部」屬性,不應該需要閱讀這些標記。 – 2009-07-05 21:34:00

回答

2

我不明白到底是什麼你正在嘗試做的,但我看到具體的話我可以迴應:

  • 單不支持的ClickOnce。
  • Mono不支持ActiveX。有一些COM的東西,但我不知道它有多完整。
  • Mono的WebBrowser控件支持基本操作,但window.external是非常高級的功能,非常特定於IE。目前沒有任何工作被放入WebBrowser控件中,除非有人提供您需要的內容,否則我不會很快看到任何改變。

針對.NET 2.0的目標是讓代碼更容易在Mono和.NET之間移植嗎?

我認爲這是針對.NET 3.5,而不是.NET 1.1。 .NET 2.0類庫比.NET 3.0/3.5更完整(沒有WPF,沒有WF,有限的WCF)。但是,如果你只是想要像LINQ這樣的C#3功能,那麼所有的C#3都應該可以正常工作。

是VB.NET代碼麻煩端口到莫諾?

對於Mono,C#肯定比VB.Net更好的支持。 VB.Net編譯器目前版本爲8.0(2005)。 VB.Net運行時類庫也不完整。 (雖然你可以完全避免這一點,仍然使用VB.Net)

+0

ClickOnce不是什麼大不了的,ActiveX也不是。它最終會被替換爲託管代碼,如果我嘗試在Mono上部署它,它可能只是一個安裝程序(帶有Mono捆綁)。 WebBrowser控件沒有放入它的工作似乎意味着我希望使該部分便攜是一個失敗的原因。 – user120242 2009-07-05 22:10:08

+0

對我來說,黑客入侵Mono的WebBrowser部分的可能性很大。 Mono的那部分現在是一個很大的混亂嗎?它至少可用嗎? – user120242 2009-07-05 22:12:18

4

這裏的模擬windows.external在.NET WebBrowser控件一個黑客:

在JavaScript代碼中,你已經把WebBrowser控件,將您的呼叫封裝到窗口。外部(例如):

function wex(){window.external.WBEvent(arguments [0],arguments [1]);返回false; }

更改功能進行導航,但是自己的協議:

功能WEX(){location.href = 'WEX:// // DOMAIN' +參數[0] +' //'+ arguments [1];返回false; }

攔截並取消在Visual Basic代碼導航:

Private Sub WebBrowser_Navigating(ByVal sender As Object, _ 
      ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) _ 
      Handles WebBrowser.Navigating 

    With e 
     If .Url.AbsoluteUri.StartsWith("wex://") Then 
      Dim str As String = HttpUtility.UrlDecode(.Url.AbsoluteUri) 
      Dim pos As Integer = InStr(14, str, "//") 
      WBEvent(Mid(str, 15, pos - 15), Mid(str, pos + 2)) 
      'Debug.Print("wex " & Mid(str, 15, pos - 15) & " " & Mid(str, pos + 2)) 
      e.Cancel = True 
     End If 
    End With 
End Sub 

域名將被轉換爲小寫。這就是爲什麼它被忽略。

如果您有多個函數,那麼讓它成爲uri的第一部分,然後在導航事件代碼中執行select語句。