1

プログラムをChromeに埋め込むことができるChrome拡張機能を作成することは可能ですか? VLC プレーヤー、Java などの古い NPAPI プラグインのようなものを意味します。ネイティブ メッセージングの例をいくつか見つけましたが、すべての例は、外部プログラムを制御するための単純なメッセージを送信するためだけのものです。

しかし、たとえば、IE Tab はネイティブ メッセージングを使用しており、IE Tab エンジンは Chrome 内で実行されています... それとも IE Tab は何か他のものを使用していますか?

4

1 に答える 1

2

更新された回答:

コメントで指摘されているように、明らかにネイティブ メッセージングを使用しています。私が理解できないのは、彼らが何をしているのかです。プロジェクトはオープン ソース (および GPL) であると主張していますが、ソースはリンクされたレポにありません。最新のコミットは 12 月 13 日で、これはあまり役に立ちません。

拡張コードを見ると、Chrome で長期的にサポートされていない可能性のあるシステム API を使用したある種の興味深いハッカー、またはある種の文書化されていない API のいずれかを何らかの方法で使用していると推測できます。ドキュメントのタイトルに 'ietaba:' + IE タブ ID が含まれるように設定し、その情報を含むメッセージをネイティブ メッセージ ホストに投稿します。

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」プロジェクトがそのコードを公開していないのは少し疑わしいようです...

アップデート

さらに掘り下げた結果、システムで開いている HWND を列挙して、起動中のタブの HWND を取得できることがわかりました。タイトルに一意のタブ ID を設定するため、必要なタブが見つかるまで HWND を列挙するだけです。その後、彼らはその場所にactivexコントロールをインスタンス化するだけだと思います。

とは言っても、Chrome が間違ったことを変更すると、これはかなり簡単に壊れてしまう可能性があるように思えます。また、ページの特定の部分を簡単にターゲットにする方法もわかりません。特定の領域に描画する必要があり、すべてを適切に描画するのは困難です。私はこのようにしたいとは思いませんが、彼らがどのようにそれをしなければならないかはわかります。

そうしないと GPL に違反することになるため、誰かがコードをリリースするようせがむ必要があります。

さらに更新

確認のために、代わりに「ATTACH」イベントを「Developer Tools」にアタッチするように変更してみました。その結果、開発者ツールのクロム ウィンドウが開き、Web ページが表示されるようになりました。

于 2015-05-22T17:26:25.923 に答える