Javascript 一旦会话存储停止,如何运行函数!=未定义
我遇到的情况是,我有一个外部JavaScript文件,该文件进行ajax调用并将某些数据保存到会话存储中。JavaScript文件从外部站点加载,因此我无法编辑它 我需要运行一个函数,以便在保存的数据加载到会话存储后立即使用它。加载此数据后,如何触发函数?请参阅: 当在另一个文档的上下文中更改了有权访问的存储区域时,Javascript 一旦会话存储停止,如何运行函数!=未定义,javascript,jquery,session-storage,Javascript,Jquery,Session Storage,我遇到的情况是,我有一个外部JavaScript文件,该文件进行ajax调用并将某些数据保存到会话存储中。JavaScript文件从外部站点加载,因此我无法编辑它 我需要运行一个函数,以便在保存的数据加载到会话存储后立即使用它。加载此数据后,如何触发函数?请参阅: 当在另一个文档的上下文中更改了有权访问的存储区域时,StorageEvent将发送到窗口 : 在这里,我们向窗口对象添加一个事件侦听器,当与当前源关联的存储对象发生更改时,该窗口对象将触发。如上所述,与此事件关联的事件对象具有许多属性
StorageEvent
将发送到窗口
:
在这里,我们向窗口对象添加一个事件侦听器,当与当前源关联的存储对象发生更改时,该窗口对象将触发。如上所述,与此事件关联的事件对象具有许多属性,其中包含有用的信息—更改的数据的键、更改前的旧值、更改后的新值、更改存储的文档的URL以及存储对象本身
见:
当在另一个文档的上下文中更改了有权访问的存储区域时,StorageEvent
将发送到窗口
:
在这里,我们向窗口对象添加事件侦听器,当与当前原点关联的存储对象发生更改时,该对象将触发该对象。如上所述,与此事件关联的事件对象具有许多属性,其中包含有用的信息—更改的数据的键、更改前的旧值、更改后的新值、更改存储的文档的URL以及存储对象本身
也许这可以帮助你:
window.onstorage = function(e) {
console.log('The ' + e.key + ' key has been changed from ' + e.oldValue + ' to ' + e.newValue + '.');
};
更多信息和
因此,您可以使用(未测试)订阅会话密钥更改:
window.onstorage=函数(e){
如果(
e、 存储区域===会话存储和
e、 键==“”&&
e、 oldValue==未定义&&
e、 newValue!==未定义
) {
log(“我的密钥不再是未定义的”)
}
};
更新:看来它不适合你。然后,您可以尝试以下方法(使用interval检查会话存储是否更改):
var区间=2000;
//然后,在您的代码中,您可以每千秒检查一次间隔
//如果您需要的sessionKey不为空
log(“程序启动”);
//你也可以限制你的意图
风险价值限额=5;
var intervalId=setInterval(函数(){
日志(“检查会话存储”);
var test=sessionStorage.getItem(“测试”);
如果(测试!==null){
log(“'test'现在定义为:“+test”);
clearInterval(intervalId);
}
如果(--limit,这可能会帮助您:
window.onstorage = function(e) {
console.log('The ' + e.key + ' key has been changed from ' + e.oldValue + ' to ' + e.newValue + '.');
};
更多信息和
因此,您可以使用(未测试)订阅会话密钥更改:
window.onstorage=函数(e){
如果(
e、 存储区域===会话存储和
e、 键==“”&&
e、 oldValue==未定义&&
e、 newValue!==未定义
) {
log(“我的密钥不再是未定义的”)
}
};
更新:因此它似乎对您不起作用。然后您可以尝试以下方法(使用interval检查会话存储是否更改):
var区间=2000;
//然后,在您的代码中,您可以每千秒检查一次间隔
//如果您需要的sessionKey不为空
log(“程序启动”);
//你也可以限制你的意图
风险价值限额=5;
var intervalId=setInterval(函数(){
日志(“检查会话存储”);
var test=sessionStorage.getItem(“测试”);
如果(测试!==null){
log(“'test'现在定义为:“+test”);
clearInterval(intervalId);
}
如果(-限制可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的可能复制的复制的可能复制的复制的可能复制的复制的可能复制的复制的可能复制的复制的复制的可能复制的复制的复制的可能复制的复制的复制的可能复制的复制可以与会话存储配合使用的选项?这似乎不适用于会话存储,它可以与本地存储完美配合使用--还有其他建议可以与会话存储配合使用吗?这似乎不适用于会话存储,它可以与本地存储完美配合使用--还有其他建议可以与会话存储配合使用吗?
window.onstorage = function(e) {
if (
e.storageArea === sessionStorage &&
e.key === "<your_key>" &&
e.oldValue === undefined &&
e.newValue !== undefined
) {
console.log("my key is not undefined anymore")
}
};
var INTERVAL = 2000;
// Then, in your code you can check every `INTERVAL` milleconds
// if the sessionKey you need is not null
console.log("Program starts");
// You can limit your intents too
var limit = 5;
var intervalId = setInterval(function() {
console.log("Checking sessionStorage");
var test = sessionStorage.getItem("test");
if (test !== null) {
console.log("'test' is now defined: " + test);
clearInterval(intervalId);
}
if (--limit <= 0) {
console.log("'test' has not changed");
clearInterval(intervalId);
}
}, INTERVAL);