- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 FireBreath 开发 Web 插件,我是这方面的新手。到目前为止,我已经开发了相当复杂的插件 API 类(具有已注册的方法、属性和一些其他变量和结构)。我正在使用 javascript 和默认值将它加载到页面上
object id="plugin0"type="application/x-myapp> 标签。
但现在我需要重定向到另一个 html 页面,我需要保留上一页中所有以前填充的变量。使用相同的模型OBJECT 标记我想我创建了我的插件的另一个实例,因为所有变量都未定义。所以我的问题是如何保留一个插件实例并使其在多个 html 页面中可访问?
特别是我有一个页面我存储带有登录屏幕的插件 API 类中的变量和指针,登录后我需要重定向到另一个页面并能够访问以前填充的变量和指针。
最佳答案
简单的答案?你不能。插件特定于单个页面。任何给定的插件实例都将随着包含它的对象标签被销毁——句点。这条规则没有异常(exception)。
也就是说,对于您正在做的事情,您可以尝试几个选项:
1) 将您的网站重写为 AJAX 和 javascript 驱动,以便所有页面实际上都是具有不同主题标签等的同一页面。参见 http://backbonejs.org/对于一个有助于此的框架。从插件的 Angular 来看,这绝对是最简单的解决方案,但它可能需要重写整个网站,这可能会有问题。
2) 使用您的 Web 应用程序维护状态并将数据传回每个页面上的插件。一旦插件实例化,您可以通过参数标签或函数调用来完成此操作
3) 使用存储在全局内存空间中的数据与您的插件创建某种“ session ”;然后您可以在另一页上恢复“ session ”。例如:
if (!plugin.restoreSession("userid")) {
plugin.createSession("userid");
}
在此示例中,createSession 和 restoreSession 将用于初始化或恢复给定 session 。这样做的挑战在于,您不知道使用您的插件打开了多少选项卡或页面,因此您很容易在所有访问相同全局数据的页面之间发生冲突。此外,有人可能会创建另一个使用您的插件的网页并恢复 session 并更改或访问数据,因此这是一个安全风险。您可以通过将域名与 session 一起存储并只允许从同一域访问 session 来缓解这种情况,但是......好吧,现在您基本上只是重新创建了 cookie。
此外,浏览器实际上并不能保证你的插件模块将加载多长时间;它可以在没有事件实例(页面请求之间)的任何时刻卸载它。实际上,插件模块更有可能在浏览器关闭之前不会被卸载,这意味着您存储在插件全局内存中的任何数据都不会被释放,并且会继续占用内存,直到您关闭浏览器。
4) 创建一个使用您的插件并跨多个页面请求工作的浏览器扩展。我不知道如何做到这一点,但我从其他人那里听到的事情让我相信这是可能的。请记住,您必须为每个受支持的浏览器制作一个,这在 IE 上可能是不可能的;可能只在 Firefox/Chrome 上。
由于您是 StackOverflow 的新手,让我欢迎您来到该站点,并在您发布问题(不仅仅是这个问题!)时提醒您,为有用的答案点赞并尝试始终将一个问题标记为正确。
关于javascript - 通过多个页面的 FireBreath 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11888416/
我在 StackOverflow 和其他地方看到了很多与此类似的问题,但没有一个直接解决我的问题。我正在 THREE.js 中使用凸包生成器生成 n 边多面体。我想将方形纹理映射到每个多面体的每个面上
我是一名优秀的程序员,十分优秀!