【问题标题】:how to reset the browser from a plugin如何从插件重置浏览器
【发布时间】:2013-07-26 05:48:05
【问题描述】:

我为浏览器制作了一个插件来喷火(Windows)。现在我确实更新了插件 - 但在加载插件之前无法升级 dll 插件。

如何重启浏览器来刷新插件?还是作为可以从浏览器缓存中下载的插件?

【问题讨论】:

    标签: windows npapi firebreath browser-plugin


    【解决方案1】:

    我看到的选项是:

    • 告诉用户安装/更新后重启浏览器
    • 告诉用户在继续安装之前关闭浏览器

    请注意,您在替换 DLL 时仍可能遇到问题。例如什么Flash 确实是在文件名后面加上版本(例如 npYourPlugin_1_2_77.dll),所以文件锁定没有问题。

    如果你这样做,你甚至可能不需要重新启动浏览器,你可以调用navigator.plugins.refresh()(从 Firefox 17 开始工作,但不确定其他浏览器)。

    另外请注意,如果您也需要支持 ActiveX 插件 (IE),我不确定它 - 也许出租车司机会在我没有遇到过的其他场景中加入。

    【讨论】:

    • 您已经介绍了我要提到的主要内容;我之前曾设法就地升级 IE 控件(按照您的建议使用文件名中的版本号,另外将其放置在特定于版本的文件夹中),但从未使用 FireBreath,并且 FireBreath 可能有一些东西是这样做会阻止它工作,因为据我所知没有人让它与 FireBreath 一起工作。
    • 我帮助过的版本的文件!谢谢!但我想知道如何从 C++ 代码重启浏览器
    • 如果你的意思是从插件 - 这真的不是一个好主意。如果您的意思是来自外部应用程序(安装程序、更新程序),您可以使用系统 API(优雅地)结束浏览器进程。请注意,除非您因可能的数据丢失而询问用户,否则这仍然不是一个好主意。我认为实际上重新启动浏览器并不是一项简单的任务 - 您可以启动刚刚关闭的二进制文件,但这可能会错过例如由实际启动的一些帮助应用程序完成的环境变量或设置。
    • 好的,我知道这是个坏主意。但是我已经获得了 navigator.plugins.refresh() 但不是在 ie 中!唯一的问题是它喜欢吗?希望更新对用户不可见。这是可能的还是只是一个童话
    • taxilian 在上面建议,这至少目前不适用于 IE(另请参阅 this questionthis one)。如果您需要插件始终是最新的,看起来您确实可能需要要求用户关闭/重新启动 IE。
    【解决方案2】:

    升级我的firebreath插件的步骤是

    1. 由 NSIS 制作插件安装程序。
    2. 在安装开始时,检测插件是否被任何浏览器占用。
    3. 目前正在关闭所有正在使用该插件的浏览器。
    4. 卸载以前版本的 pluin。
    5. 在最新版本号的文件夹中安装新版本的插件。
    6. 安装结束时,重新启动之前关闭的浏览器,然后导航到所需的 URL。

    顺便说一句,正如Georg所说,你不需要在检查插件版本后重新启动Chrome和Firefox,这意味着你有升级插件并立即使用新插件的例程。 但是,你必须重启IE,因为当你得到一个activex控件的版本时,你必须实例化它,这使得插件首先加载。

    现在,它运行良好且符合预期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      相关资源
      最近更新 更多