.net Mono和window.external

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

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

将.NET2.0作为目标会使Mono和.NET之间的代码更容易移植吗? VB.NET代码移植到Mono是否麻烦?我想不应该是吧?(我与VB6程序员一起工作)

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

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


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

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

  • 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。)

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

  • 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。)

下面是一个在.Net WebBrowser控件中模拟windows.external的方法:

在放入webbrowser控件的javascript代码中,封装对window.external的调用(例如):

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

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

函数wex(){location.href='wex://DOMAIN//'+参数[0]+'/'+参数[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语句。

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

在放入webbrowser控件的javascript代码中,封装对window.external的调用(例如):

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

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

函数wex(){location.href='wex://DOMAIN//'+参数[0]+'/'+参数[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语句。

请添加更多详细信息。当脚本在Windows窗体WebBrowser控件中运行时,无需阅读标记即可知道您正在询问JavaScript中“window”对象的“external”属性。请添加更多详细信息。当脚本在Windows窗体WebBrowser控件中运行时,无需阅读标记就可以知道您在询问JavaScript中“window”对象的“external”属性。ClickOnce不是什么大问题,ActiveX也不是。它最终将被托管代码所取代,如果我尝试在Mono上部署它,它可能只是一个安装程序(使用Mon)