如何在同一时间或下次访问时使用www.为同一域创建localStorage
How to create localStorage for the same domain with www. at the same time or at the next visit?
我创建了一个JS文件,放在我的网页之外的其他网页中。所以我的是domain-1.com,我把它放在domain-2.com和domain-3.com 上
这个JS包含jsonp,我成功地将他们页面中的一些数据保存到了我的数据库中。此外,我创建了一些cookie,并将一个值保存到本地存储中。问题是,当访问者访问domain-2.com和明天访问www.domain-2.com时,他们将有不同的值,因为在www.上
我希望这个值在www.上是相同的,或者不相同,也许同时,我不知道一个适用的想法。对我来说,在没有www.的情况下,最好同时传递值
如何做到这一点?我只为他们提供了一个JS外部链接。如果我也放一个iframe也没关系。
最好的解决方案是设置到任意一个域的重定向,这样就可以完全避免这个问题。
以下代码显示了将值发送到非www域仅用于存储的概念。如果你也需要从www域中读取这些值,或者想要一个库为你做所有的事情,你应该使用最后列出的库之一这些库使用相同的概念,但将为您处理大多数事情。
您只能将值存储在一个域上,如果您在www域上,则可以使用跨源通信发送值。创建一个iframe
,用于加载非www域的脚本。在此脚本中,您可以将值保存在该域的本地存储中。
以下是带有一些最小html5标记的iframe的内容,在本例中保存为storage.html
,并从example.com
提供。
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title> </title>
<script>
window.addEventListener("message", storeItem, false);
function storeItem(event) {
if (!(event.origin == "http://example.com" || event.origin == "http://www.example.com")) {
return;
}
localStorage.setItem(event.data.key, event.data.value);
}
</script>
</head></html>
当您想要存储数据时,请使用postMessage
与iframe进行通信。需要先加载iframe,然后才能发送消息。
<iframe id="storageScriptFrame"></iframe>
<script>
var target = "http://example.com";
var storageScriptFrame = document.getElementById("storageScriptFrame");
var storageScriptWindow = storageScriptFrame.contentWindow;
function storeItem(key, value) {
var message = {key: key, value: value};
storageScriptWindow.postMessage(message, target);
}
// you can store values after the iframe has loaded
storageScriptFrame.onload = function() {
storeItem("foo", "bar");
};
// replace this with actual page
storageScriptFrame.src = 'http://example.com/storage.html';
</script>
请确保将example.com
域替换为实际域。检查源域很重要,这样其他网站就无法向您发送消息。
在某个时刻,您还需要读取那些存储的值。根据您对存储值的处理方式,您有两个选项。
- 如果不需要与主窗口交互,可以将读取值的脚本移动到iframe中
- 如果确实需要在主窗口中获取值,请再次使用
postMessage
将值发回
第二个选项可能会变得复杂,因为postMessage
是异步的,只能以一种方式工作。我建议使用现有的库来完成这项工作(那时您不需要上面的代码)。
- 跨域本地存储看起来不错且易于使用
- localStorage工具是此任务的另一个库
例如,如果跨域本地存储,您只需按照设置说明进行操作,并且在initCallback
函数中,您可以调用xdLocalStorage.getItem
和xdLocalStorage.setItem
从example.com
的本地存储中获取和设置项目。
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何将localStorage值设置为false
- 如果localstorage为空,则显示欢迎消息
- 基于localStorage的Meteor激活模板
- LocalStorage phonegap摄像头图像
- 我希望在不替换现有变量的情况下恢复localStorage中的变量
- 为什么localStorage[“..”]未定义,而localStorage.getItem(“..”)为null
- 使用HTML5 localStorage和jQuery添加到收藏夹/书签
- 在特定条件下从存储在localStorage中的阵列中删除对象
- JavaScript/Ionic2-为什么我可以't检索localStorage值
- using LocalStorage ionic 2
- 如何使用javascript localStorage保存用户选择并在不同的html页面中显示
- 从localStorage添加和检索阵列
- Angular2/JavaScript-如何显示localStorage保存的所有变量并获取所有键的总长度
- 使用nodejs保存到localStorage
- 在Javascript中使用LocalStorage
- 通过phonegap中的电子邮件发送存储在html5 localStorage中的信息
- 通过localStorage中的密钥获取ID
- 使用application/x-www-form-urlencoded使用node.js在post请求中发送数组
- 如何在同一时间或下次访问时使用www.为同一域创建localStorage