我正在使用FireBreath开发Web插件,我在这方面很新手。到目前为止,我已经开发了相当复杂的插件API类(具有已注册的方法,属性和一些其他变量和结构)。我正在使用javascript将其加载到页面上并默认为
object id =“plugin0”type =“application / x-myapp> tag。
但是现在我需要重定向到另一个html页面,我需要保留之前页面中所有以前填充的变量。使用相同的模型OBJECT标签我想我创建了我的插件的另一个实例,因为所有变量都是未定义的。所以我的静止是如何保留一个插件实例并使其可以在多个html页面中访问?
具体来说,我有一个页面,我存储插件API类中的变量和指针以及登录屏幕,登录后我需要重定向到另一个页面,并能够访问以前填充的变量和指针。
答案 0 :(得分:3)
简单回答?你不能。插件特定于单个页面。任何给定的插件实例都将被销毁,包含它的对象标签将被销毁 - period 。这条规则没有例外。
也就是说,你可以尝试一些选择:
1)将您的网站重写为AJAX和javascript驱动,以便所有网页实际上都是具有不同主题标签的页面,等等。请参阅http://backbonejs.org/了解一个有助于此的框架。从插件的角度来看,这绝对是最简单的解决方案,但它可能需要重写整个网站,这可能会有问题。
2)使用您的Web应用程序维护状态,并将数据传回每页的插件。一旦插件实例化
,您就可以通过参数标签或函数调用来完成此操作3)用你的插件创建某种“会话”,数据存储在全局存储空间中;然后你可以在另一页上恢复“会话”。例如:
if (!plugin.restoreSession("userid")) {
plugin.createSession("userid");
}
在此示例中,createSession和restoreSession将用于初始化或恢复给定会话。这样做的挑战是您不知道使用插件打开了多少个选项卡或页面,因此您可以轻松地在所有访问相同全局数据的页面之间发生冲突。此外,有人可以创建另一个使用您的插件并恢复会话并更改或访问数据的网页,因此存在安全风险。您可以通过在会话中存储域名并仅允许从同一域访问会话来缓解这种情况,但是......好吧,现在您基本上只是重新创建了Cookie。
此外,浏览器实际上并不能保证插件模块的加载时间。它可以在没有活动实例的任何时刻(在页面请求之间)卸载它。在实践中,更有可能的是,在浏览器关闭之前不会卸载插件模块,这意味着您在插件的全局内存中存储的任何数据都不会被释放,并且会在您关闭浏览器之前继续占用内存。
4)创建一个浏览器扩展程序,该扩展程序使用您的插件并处理多个页面请求。我不知道该怎么做,但我从别人那里听到的东西让我相信它是可能的。请记住,您必须为每个支持的浏览器制作一个,并且在IE上可能不可能;可能只在Firefox / Chrome上使用。
由于您是StackOverflow的新用户,让我欢迎您访问该网站,并在您发布问题时提醒您(不仅仅是这个!)以提供有用的答案,并尝试始终将其标记为正确。