1

嘿,我有一个简单的问题:

我有一个 chrome 扩展,可以在工具栏上添加一个弹出页面。它接受来自用户的输入,然后调用生成 XML 文件的 NPAPI dll。我希望能够在 NPAPI dll 完成其工作后,创建一个新选项卡,该选项卡将打开到新生成的 XML 页面。

谁能帮我解决这个问题?

谢谢。

4

2 回答 2

0

理想情况下,您不会将 UI 行为的逻辑放入插件中,而是放入扩展中。插件应该告诉扩展 XML 文件所在的位置,而扩展应该处理其余部分。

这可以通过两种方式完成:

同步返回位置很容易:您直接从Invoke()插件的实现中完成工作,并将包含文件位置的字符串返回给脚本。
这当然有在处理完成之前阻塞主线程(和 GUI 线程)的缺点,因此当处理没有快速完成时是没有选择的。

异步返回它需要更多的工作:理想情况下,您允许扩展指定一个回调函数,在处理完成时应该调用该回调函数。这可以通过addEventListener()相应处理或允许脚本在启动 XML 处理时将回调作为参数传递来实现。XML 处理函数然后启动或提供另一个线程执行实际工作并立即返回。处理完成后,您调用NPN_InvokeDefault()存储的函数对象来调用它。
注意:调用 JavaScript 总是必须在主线程上完成。

于 2010-10-23T14:54:58.467 回答
0

您可以让您的 NPAPI 通过NPN_Invoke与 JavaScript 通信。NPN_Invoke 将允许您在给定的NPObject上调用方法。

例如,您可以构造您的方法NPN_GetStringIdentifier,并使用它来执行弹出窗口中的方法。

您可以参考这篇文章,了解如何从 NPAPI 插件与 JavaScript 进行通信。显示的示例是一个简单的console.debug("Hello from C++")

更新

我注意到您想在之后立即打开 xml 文件。您是否将 XML 文件保存在扩展文件夹的位置?

C:\Users\[user]\AppData\Local\Google\Chrome\User Data\Default\Extensions\[extension_id]\[extension_version]

然后你可以打开它chrome.extension.getURL([file]);

但是,如果您返回 XML 文件并在扩展程序本身中打开它,那就太好了。

于 2010-10-22T00:21:19.117 回答