FlatlanD_ Ответов: 1

Как открыть новую форму в C# из javascript?


Привет,

Я пытаюсь сделать так, чтобы я мог открыть форму C# из javascript в HTML.

Я не могу открыть его, потому что для этого требуется STA-нить. Попробовал запустить метод, который открывает новую форму при угрозе STA, но затем закрывает вновь созданную форму, как только она будет создана.

Не мог бы кто-нибудь объяснить мне, как я могу сделать то, что пытаюсь сделать?

Что я уже пробовал:

Я попытался создать угрозу STA и открыть там новую форму, но она закрывается, как только появляется.

1 Ответов

Рейтинг:
12

OriginalGriff

Ты не можешь этого сделать.
Javascript намеренно ограничен в том, что он может делать: и одна из главных вещей, которую он не может сделать, - это запустить приложение - любое приложение-на вашем компьютере. Почему? Потому что если бы вы могли, то могли бы и вредоносные сайты. Поэтому по соображениям безопасности Javascript не может открывать и приложения.

И код C# в веб-среде работает на сервере, а не на клиенте: клиенту даже не нужно устанавливать .NET или даже быть способным установить его - это может быть подключенный к интернету холодильник, работающий с базовым браузером вообще без файловой системы!
Javascript всегда работает на клиенте, а не на сервере - поэтому, даже если он может вызвать выполнение кода C#, форма будет отображаться на сервере, за тысячи километров от того места, где сидит пользователь!


FlatlanD_

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

FlatlanD_

Может быть, можно вызвать метод из JS, чтобы изменить пользовательский интерфейс приложения C#? Например, видимость кнопок, текст кнопок и т. д.?

OriginalGriff

Что вы на самом деле пытаетесь сделать? Как вы думаете, с какой целью JS, разговаривая с вашим приложением, поможет вам?
Может быть, есть более простой способ.

FlatlanD_

На самом деле это трудно объяснить. Мое приложение имеет cefsharp реализован внутри со ссылкой на мою страницу. Когда я нажимаю определенную кнопку внутри своей страницы, она должна открыть мою регистрационную форму внутри приложения c# (эта регистрационная форма должна быть в приложении c#, а не в HTML). Кроме того, как приложение C#, так и HTML-страница должны изменять данные друг между другом.

OriginalGriff

Я сам не использовал CefSharp, но я понимаю, что вы можете это сделать - код C# действует как сервер, который содержит клиентский браузер в качестве элемента управления, - и клиент может получить доступ к серверным объектам через элементы управления.
https://blog.dmbcllc.com/create-a-desktop-application-using-angular-bootstrap-and-c/
Вроде бы говорит, что вы можете манипулировать объектами C# непосредственно из JS с помощью метода RegisterJsObject. Если это так, то это, вероятно, был бы правильный путь - но вам, вероятно, было бы лучше опубликовать новый вопрос, объясняющий использование CefSharp, и посмотреть, использовал ли кто-нибудь здесь его в гневе! :смеяться:

FlatlanD_

RegisterAsyncJsObject - я сделал это, но вызов этих методов из JS ничего не делает. Например, если я пытаюсь изменить видимость панели в другой форме с помощью этого метода, он ничего не делает.

OriginalGriff

Извините - но вам нужен кто-то с опытом работы в CefSharp, и это не я! :смеяться:
Напишите еще один вопрос, объясняющий CefSharp и то, что вы пытались сделать - на сайте есть много экспертов в разных областях, и один из них может вам помочь.

FlatlanD_

Ладно, большое вам спасибо.