2009-07-05 1 views
0

Это приложение Windows Forms, развернутое через ClickOnce. Планируется использовать элемент управления WebBrowser для публикации веб-приложения, использующего элементы управления Active-X. Используя window.external и InvokeScript, объекты будут заменены ссылками на объекты Reg-Free COM (SXS). Я знаю, что это звучит как беспорядок, но это меньшее зло, и я нахожусь в плотном графике. В конце концов, часть SXS может быть заменена, и, надеюсь, серверный код может быть обновлен с чем-то лучшим. Будут ли серьезные проблемы с производительностью? С какими трудностями я прошу об этом?Mono и window.external

Будет ли таргетинг на .NET 2.0 упростить использование кода, который переносится между Mono и .NET? Является ли код VB.NET неудобным для порта в Mono? Я предполагаю, что этого не должно быть? (Я работаю с программистами VB6).

Документы говорят, что window.external недоступен в Mono. Похоже, есть планы реализовать это. Безопасно ли просто использовать window.external сейчас и ждать, пока Mono его реализует? Или, есть способ подражать этому?

У меня есть другие планы медленно сделать код более портативным, и я надеюсь, что смогу использовать его как своего рода метод (читай: лазейку), чтобы сделать это возможным.

Если у вас есть предложения по отношениям и состояниям ума, я буду рад их услышать. Но сначала попробуйте ответить на мои основные проблемы. Спасибо.

+1

Пожалуйста, добавьте больше деталей. Нет необходимости читать теги, чтобы знать, что вы спрашиваете о «внешнем» свойстве объекта «window» в JavaScript, когда этот сценарий работает в элементе управления Windows Forms WebBrowser. –

ответ

2

Я не понимаю, именно то, что вы пытаетесь сделать, но я вижу конкретные слова, которые я могу реагировать на:

  • Mono не поддерживает ClickOnce.
  • Моно не поддерживает 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). Однако, если вам просто нужны функции C# 3, такие как LINQ, все C# 3 должны работать нормально.

Является ли код VB.NET неудобным для порта в моно?

C# определенно лучше поддерживается, чем VB.Net на Mono. Компилятор VB.Net в настоящее время является версией версии 8.0 (2005). Библиотека классов времени исполнения VB.Net также не завершена. (Хотя вы можете полностью избежать этого и до сих пор использует VB.Net.)

+0

ClickOnce не имеет большого значения, не является ActiveX. В итоге все будет заменено управляемым кодом, и если бы я попытался развернуть его на Mono, он, вероятно, просто был бы установщиком (вместе с Mono). То, что элемент управления WebBrowser не работает, кажется, подразумевает, что моя надежда на то, чтобы сделать эту порцию портативной, является потерянной причиной. – user120242

+0

Насколько вероятно, что я буду взломать часть веб-браузера Mono. Является ли эта часть Моно большой проблемой прямо сейчас? Насколько это возможно? – user120242

+0

Извините, я не прояснил это. Базовая функциональность WebBrowser работает, однако window.external этого не делает. Глядя на то, что делает window.external, это похоже на IE. Элемент управления WebBrowser от Mono использует Gecko (Mozilla) в качестве бэкэнд. – jpobst

4

Вот хак для имитации windows.external в элементе управления .NET WebBrowser:

В вашем яваскрипте кода, который вы поместили в обозревательУправлении , инкапсулируйте свои вызовы в окно.внешний (например):

функция wex() {window.external.WBEvent (аргументы [0], аргументы [1]); return false; }

Изменение функции навигации, но с собственным протоколом:

функция WEX() {location.href = 'Wex: // ДОМЕН //' + аргументы [0] + ' // '+ arguments [1]; return 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 в коде события навигации.

+0

Это заставляет свойство документа управления браузером очищаться. Из-за этого невозможно перезвонить в скрипт с использованием Document.InvokeScript. Конечно, только в моно. Какие-либо предложения? – Fantius