Возможные каналы связи между Javascript на HTML-странице и Windows EXE? - PullRequest
0 голосов
/ 24 августа 2010

Вот в чем дело.

двусторонняя связь (в стиле RPC) необходима между JavaScript на HTML-страницах, предоставляемых веб-сервером в режиме онлайн (с управлением сеансами и т. посетитель сайта.

Оба являются частями одного «пакета» и должны иметь возможность общаться.

Конечно, существует специальный протокол, но в некоторых браузерах, таких как Chrome и Safari, иногда возникают проблемы с обработкой собственного протокола, поэтому он недостаточно надежен ...

Другая возможность - создать минимальный веб-сервер внутри EXE-файла, чтобы связь работала со всеми браузерами.

Можно разработать расширение / плагин для каждого браузера отдельно, но это сложная задача.

Использование flash / java для этой задачи не представляется возможным из-за песочницы, но я не уверен в этом ??

У вас есть другие идеи?

1 Ответ

0 голосов
/ 24 августа 2010

Вы можете использовать встроенный объект ActiveX (COM) и взаимодействовать между обеими платформами.Я сделал это (и не поверил бы, что это возможно, если бы я не сделал).Это противно, но это работает.В проекте, в котором я его использовал, у меня не было выбора (что является единственной причиной когда-либо сделать это).Я построил COM-объект в C # .net и открыл интерфейс для COM для использования на странице.Это выглядит примерно так:

    function doSomethingInteresting() {
        // in your js:
           var obj = document.getElementById('yourObjectId');
           obj.MethodNameDefinedOnYourCOMObject("someParameterValue");
    }

        // and your HTML looks like this; note that you can even catch events thrown from the COM object in Js...
    <body>
    <form>
      <object id="yourObjectId" height="0" width="0" classid="clsid:99999999-9999-9999-9999-999999999999" onerror="oError()" VIEWASTEXT></object>
    <script for="yourObjectId" event="ThisIsTheJavaScriptEventHandlerMethod(parameterName)" language="javascript">
    // event handling here for the COM object
            function yourObjectId::ThisIsTheJavaScriptEventHandlerMethod(parameterName) {
          // you can process the parameterName passed from the object here
            }
    </script>
    </form>
    </body>

Удачного кодирования!

...