我有一个为该网页构建的网页和Chrome扩展程序。
用户成功登录我的网站后。 我触发了这个:
localStorage.app_isLoggedIn = true;
localStorage.app_loggedInTimeStamp = new Date();
<小时/> (我验证了这一点:成功保存)
Chrome扩展程序详细信息
清单文件:
{
"manifest_version" : 2 ,
"name" : "app",
"description" : "Welcome to app",
"version" : "1.0",
"browser_action" : {
"default_icon" : "app.png",
"default_popup" : "popup.html"
},
"background": {
"page": "background.html"
},
"permissions" : [
"storage",
"background",
"tabs"
],
"web_accessible_resources" : [
"*.html",
"*.js"
]
}
============
authenticate.js - 这是我页面上的第一个脚本文件(popup.html)
// create to authenticate weather app has been logged in recently or not
// IF NOT LOGGED IN: the user should be redirected to app web page
// IF LOGGED IN: the plugin would proceed
var _MIN_PER_DAY = 1000 * 60;
// a and b are javascript Date objects
function dateDiffInHours(a, b) {
// Discard the time and time-zone information.
var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
return Math.floor((utc2 - utc1) / _MIN_PER_DAY);
}
// MECHANISM USED : HTML 5 Local storage
var maxDaysToGoWithoutLogin = 5; // default : has to be configurable
var maxHoursToGoWithoutLogin = maxDaysToGoWithoutLogin * 24; // default : has to be configurable
var st = localStorage.app_isLoggedIn;
var timeStamp = localStorage.app_loggedInTimeStamp;
console.log("status" + st + " ---- timestamp " + timeStamp);
if (st != undefined && st != "undefined" && st != null && st != 'null' && timeStamp != undefined && timeStamp != "undefined" && timeStamp != null && timeStamp != "null") {
console.log("status and stamps correct");
// the user is logged in
// now check for time stamp
var localStorageTimeStampForLastLogin = new Date(localStorage.app_loggedInTimeStamp);
var diff = dateDiffInHours(localStorageTimeStampForLastLogin, new Date());
alert(diff);
alert(maxHoursToGoWithoutLogin);
if (diff > maxHoursToGoWithoutLogin) {
// EXPIRED : requires relogin
chrome.tabs.create({ url: "https://app.in" });
} else {
// success : the plugin would proceed
}
} else {
chrome.tabs.create({ url: "https://app.in" });
}
在此之后,我点击我的Chrome扩展程序。
我想要的行为
Chrome插件应检查我登录应用程序时保存的HTML 5本地存储变量。
如果用户未登录我的应用程序:则应将用户重定向到我的网络应用程序。
如果用户已登录我的应用:该插件应该弹出,插件现在会显示我的应用数据。
问题
Chrome扩展程序无法访问我的应用程序设置的本地存储。 (上面的控制台消息输出)
statusundefined ---- timestamp undefined
当我检查插件弹出窗口的本地存储时,我在我的chrome dev工具中得到了这个。
localStorage
Storage {length: 0}
请参阅:我认为此链接不是我的用例 Chrome extension: accessing local storage in content script
答案 0 :(得分:0)
我假设您正在尝试访问当前有效标签的 localStorage
。
您似乎想要查看特定网页的localStorage
,无论该网页是否已打开。这样做似乎是处理事情的一种笨拙的方式,但如果这是你想要尝试的......
在popup.html
的上下文中执行此操作无效:它有自己的localStorage
。
要访问网页的localStorage,您需要将内容脚本注入页面。
如果未在标签中打开,您可以在背景页面的iframe
中加载页面,可能正常工作。
请注意,您需要拥有应用网页的主机权限。