1

Возможно ли создать расширение Chrome, которое может встроить программу в Chrome? Я имею в виду что-то вроде старых плагинов NPAPI, таких как VLC-плеер, java и т. Д. ... Я нашел примеры собственных сообщений, но каждый пример предназначен только для отправки простых сообщений для управления внешней программой.Могу ли я встраивать программу через встроенный обмен сообщениями в Chrome (например, старые плагины npapi)?

Но, например, в IE Tab используется встроенная система обмена сообщениями, и их механизм IE работает внутри Chrome ... или IE Tab использует что-то еще?

ответ

2

Обновленный ответ:

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

От взгляда на код расширения я хотел бы угадать, что они каким-то образом используют какой-либо интересный хакер, используя системные API, которые могут не поддерживаться долгосрочными или некорректными API-интерфейсами Chrome; они устанавливают заголовок документа, который содержит «ietaba:» + идентификатор закладки IE, а затем отправляет сообщение на основной узел сообщений с этой информацией.

chrome.tabs.getCurrent(function(tab) { 
    // We can't attach if we don't have a window id or aren't active 
    if (!tab.active || !this.windowId) { 
     this.restoreTitle(); 
     return; 
    } 

    // Remember the title change is asynchronous, so don't keep changing it or the helper 
    // will never find it. We may have to retry several times to find the window after 
    // a single title change 
    if (document.title.indexOf('ietaba:') == -1) { 
     this.realTitle = document.title; 
     document.title = 'ietaba:' + Background.getNextIETabId(); 
    } 

    var msg = { 
     type: 'ATTACH', 
     tabTitle: document.title, 
     innerWidth: this.getIEWidth(), 
     innerHeight: this.getIEHeight() 
    } 
    NativeHost.postMessage(msg); 
}.bind(this)); 

То, что я не могу понять, заключается в том, как они могут использовать это для прикрепления к нему; они, похоже, как-то получают HWND для этого раздела. Это заставляет меня задаться вопросом, предоставил ли Google им специальные API-интерфейсы или нашел ли они какой-нибудь умный взлом. Это кажется немного подозрительным, что проект «GPL» не освобождает свой код ...

UPDATE

После этого еще немного покопаться, я обнаружил, что вы можете перечислить открытый HWNDs в системе получить HWND для вкладки, которую они запускают; они устанавливают уникальный идентификатор табуляции в заголовке, поэтому они просто перечисляют HWND, пока не найдут тот, который им нужен. После этого я предполагаю, что они просто создают элемент управления activex в этом месте.

Это говорит о том, что это похоже на что-то, что может сильно сломаться, если Chrome изменит неправильные вещи. Я также не вижу, как можно легко настроить таргетинг на определенную часть страницы; вам придется рисовать в определенном регионе, и было бы сложно получить все как можно лучше. Я не думаю, что хочу сделать это таким образом, но я вижу, как они должны это делать.

Кому-то следует прикрыть их, чтобы освободить их код, поскольку они нарушают GPL, не делая этого.

ДАЛЕЕ UPDATE

Просто, чтобы проверить это, я попытался изменить «ATTACH» событие для присоединения к «Developer Tools» вместо - в результате у меня теперь есть окно разработчик инструментов хром открытый с паутиной в нем.

+1

Смешная вещь, она использует собственные сообщения. – Xan

+0

здесь - https://getsatisfaction.com/ietab/topics/chrome_canary_has_not_worked_with_ietab_for_the_last_week Они говорят о swinging NPAPI для Native Messaging. Кроме того, когда я проверял файлы расширения, есть множество функций от Native Messaging и есть exe-файл, который, вероятно, должен регистрировать хост и запускать IE-движок. – MartySK

+0

Вы правы; Я нашел дополнительную информацию и разместил ее выше – taxilian