代码之家  ›  专栏  ›  技术社区  ›  user120242

Mono和window.external

  •  0
  • user120242  · 技术社区  · 15 年前

    这将是通过ClickOnce部署的Windows窗体应用程序。 计划是使用WebBrowser控件公开使用Active-X控件的web应用程序。使用window.external和InvokeScript,对象将替换为对Reg Free COM对象(SX)的引用。我知道这听起来像是一团糟,但它是一个较小的邪恶,我的日程安排很紧。最终,可以替换SXS部分,并且希望服务器端代码可以更新为更好的代码。 这会有严重的性能问题吗?我要找多少麻烦?

    VB.NET代码移植到Mono是否麻烦?我想不应该是吧?(我与VB6程序员一起工作)。

    文档说window.external在Mono下不可用。听起来好像有计划实施这一点。现在使用window.external并等待Mono实现它是否安全? 或者,有没有办法模仿这一点?

    我有其他计划慢慢地使代码更具可移植性,我希望我能将此作为一种方法(读:loophole)使之成为可能。

    如果你对态度和心态有什么建议,我也很乐意听到。但请先回答我的主要担忧。非常感谢。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Larry Gates    15 年前

    下面是一个在.NET WebBrowser控件中模拟windows.external的黑客:

    函数wex(){window.external.WBEvent(参数[0],参数[1]);返回false;}

    将功能更改为导航,但使用您自己的协议:

    函数wex(){location.href='wex://DOMAIN//'+参数[0]+'/'+参数[1];返回false;}

      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语句。

        2
  •  2
  •   jpobst    15 年前

    我不太明白你到底想做什么,但我看到了一些具体的词语,我可以做出回应:

    • Mono不支持ClickOnce。
    • Mono不支持ActiveX。有一些COM的东西,但我不知道它有多完整。
    • Mono的WebBrowser控件支持基本操作,但是window.external是非常高级的功能,非常特定于IE。目前WebBrowser控件中没有任何工作,我也不认为会很快改变,除非有人提供您所需的内容。

    将.NET2.0作为目标是否会使Mono和.NET之间的代码更容易移植?

    我认为这与针对.NET3.5,而不是针对.NET1.1是相反的。.NET2.0类库比.NET3.0/3.5类库(无WPF、无WF、有限WCF)要完整得多。然而,如果你只是想要像LINQ这样的C#3特性,那么所有C#3都应该可以正常工作。

    VB.NET代码移植到Mono是否麻烦?

    在Mono上,C#显然比VB.Net更受支持。VB.Net编译器目前的版本是8.0(2005)。VB.Net运行时类库也不完整。(尽管您可以完全避免这种情况,并且仍然使用VB.Net。)