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