【问题标题】:FireBreath plugin through multiple pagesFireBreath插件通过多个页面
【发布时间】:2012-08-09 17:03:39
【问题描述】:

我正在使用 FireBreath 开发 Web 插件,而且我是这方面的新手。到目前为止,我已经开发了相当复杂的插件 API 类(带有注册的方法、属性和一些其他变量和结构)。我正在使用 javascript 和默认将其加载到页面上
object id="plugin0" type="application/x-myapp> 标签。
但是现在我需要重定向到另一个 html 页面,并且我需要保留以前页面中所有以前填充的变量。使用与 OBJECT 相同的模型标记我想我创建了我的插件的另一个实例,因为所有变量都未定义。所以我的问题是如何保留一个插件实例并使其在多个 html 页面中可访问?
具体来说,我有一个页面来存储变量和带有登录屏幕的插件 API 类中的指针,登录后我需要重定向到另一个页面并能够访问以前填充的变量和指针。

【问题讨论】:

    标签: javascript plugins npapi firebreath


    【解决方案1】:

    简单的答案?你不能。插件特定于单个页面。任何给定的插件实例都将被销毁,其中包含它的对象标记被销毁 - 句号。这条规则没有例外。

    也就是说,您可以尝试以下几种选择:

    1) 将您的网站重写为 AJAX 和 javascript 驱动,以便所有页面实际上是具有不同主题标签等的同一页面。请参阅http://backbonejs.org/ 以获取有助于此的框架。从插件的角度来看,这绝对是最简单的解决方案,但它可能需要重写整个网站,这可能会有问题。

    2) 使用您的 Web 应用程序维护状态并将数据传回每个页面上的插件。一旦插件实例化,您可以通过参数标签或函数调用来做到这一点

    3) 使用您的插件创建某种“会话”,并将数据存储在全局内存空间中;然后,您可以在另一个页面上恢复“会话”。例如:

    if (!plugin.restoreSession("userid")) {
        plugin.createSession("userid");
    }
    

    在此示例中,createSession 和 restoreSession 将用于初始化或恢复给定会话。这样做的挑战是您不知道使用您的插件打开了多少选项卡或页面,因此您很容易在访问相同全局数据的页面之间发生冲突。此外,有人可能会创建另一个网页来使用您的插件并恢复会话并更改或访问数据,因此存在安全风险。您可以通过将域名与会话一起存储并仅允许从同一域访问会话来缓解这种情况,但是……好吧,现在您基本上只是重新创建了 cookie。

    另外,浏览器实际上并不能保证你的插件模块会被加载多久;如果没有活动实例(在页面请求之间),它可以随时将其卸载给您。实际上,在浏览器关闭之前,插件模块更有可能不会被卸载,这意味着您在插件中存储在全局内存中的任何数据都不会被释放,并且会继续占用内存,直到您关闭浏览器。

    4) 创建一个浏览器扩展,使用您的插件并跨多个页面请求工作。我不知道如何做到这一点,但我从其他人那里听到的事情让我相信这是可能的。请记住,您必须为每个支持的浏览器制作一个,这在 IE 上可能是不可能的;可能只在 Firefox/Chrome 上。

    由于您是 StackOverflow 的新手,因此我欢迎您访问该网站,并在您发布问题(不仅仅是这个问题!)时提醒您对有用的答案进行投票,并尝试始终将一个标记为正确。

    【讨论】:

    • 您好,感谢您的有用和复杂的回答。在我内心深处的某个地方,我认为我有可能无法做到这一点。我想我会选择 1) 路径,因为我的网站到目前为止只有 2 个页面。
    • 请记住,如果您使用 CSS 使插件 display:none 或 visibility:hidden 您将导致它卸载;最简单的解决方案通常是绝对定位它,并在它应该隐藏时使其 1px x 1px
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2021-10-03
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多