这将是通过ClickOnce部署的Windows窗体应用程序。 计划是使用WebBrowser控件来公开使用Active-X控件的Web应用程序。使用window.external和InvokeScript,对象将被替换为对Reg-Free COM对象(SXS)的引用。我知道这听起来像是一团糟,但它是一个较小的邪恶,我的时间紧迫。最终,可以替换SXS部分,并希望服务器端代码可以更好地更新。 这会有严重的性能问题吗?我要求多少麻烦?
针对.NET 2.0,是否可以更轻松地获得可在Mono和.NET之间移植的代码? 移植到Mono的VB.NET代码是否麻烦?我假设它不应该是? (我正在与VB6程序员合作)。
文档说mono下没有window.external。听起来有计划实现这一点。现在只使用window.external并等待Mono实现它是否安全? 或者,有没有办法模仿这个?
我有其他计划慢慢使代码更容易移植,我希望我可以将它作为一种方法(读取:漏洞)使其成为可能。
如果你有关于态度和心态的建议,我也很乐意听到。但请先尝试回答我的主要问题。谢谢。
答案 0 :(得分:4)
这是在.NET WebBrowser控件中模拟windows.external的黑客攻击:
在你的javascript代码中,你已经放入了webbrowser控件,封装你对window.external的调用(例如):
function wex(){window.external.WBEvent(arguments [0],arguments [1]);返回false; }
更改要导航的功能,但使用您自己的协议:
function wex(){location.href ='wex:// DOMAIN //'+ arguments [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
DOMAIN将转换为小写。这就是为什么它被忽略了。
如果您有多个函数,那么让它成为uri的第一部分,并在导航事件代码中执行select语句。
答案 1 :(得分:2)
我不明白你到底想要做什么,但我看到了我能回答的特定词语:
针对.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?
在Mono上,C#肯定比VB.Net更好。 VB.Net编译器目前是版本8.0(2005)。 VB.Net运行时类库也不完整。 (虽然你可以完全避免使用VB.Net。)