1

是否可以创建可以将程序嵌入 Chrome 的 Chrome 扩展程序?我的意思是像 VLC 播放器、java 等旧的 NPAPI 插件之类的东西......我找到了一些原生消息传递示例,但每个示例仅用于发送简单消息以控制外部程序。

但是例如 IE Tab 使用的是本机消息传递,并且他们的 IE tab 引擎在 Chrome 中运行......或者 IE Tab 使用其他东西?

4

1 回答 1

2

更新的答案:

正如评论中所指出的,它显然使用了本机消息传递;我想不通的是他们在做什么。该项目声称是开源的(和 GPL),但在链接的 repo 中找不到源代码;最近的提交是 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。这让我想知道谷歌是否给了他们特殊的 API,或者他们是否发现了一些聪明的 hack。“GPL”项目没有发布它的代码似乎有点可疑......

更新

在进行了更多挖掘之后,我发现您可以枚举系统中打开的 HWND 以获取它们正在启动的选项卡的 HWND;他们在标题中设置了一个唯一的选项卡 ID,因此他们只会枚举 HWND,直到找到他们想要的那个。在那之后,我想他们只是将 activex 控件实例化到那个位置。

也就是说,如果 Chrome 更改了错误的内容,这似乎很容易破坏。我也看不出您如何轻松定位页面的特定部分。你必须要画到一个特定的区域,要让它完全正确会很棘手。我不认为我想这样做,但我可以看到他们必须这样做。

有人应该纠缠他们发布他们的代码,因为他们不这样做就违反了 GPL。

进一步更新

只是为了验证一下,我尝试将“ATTACH”事件更改为附加到“开发者工具”——结果我现在打开了一个开发者工具 chrome 窗口,其中包含一个网页。

于 2015-05-22T17:26:25.923 回答