2009-07-05 103 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语句。