从Chrome扩展程序访问网页的localStorage

时间:2014-04-11 10:54:59

标签: javascript html5 google-chrome google-chrome-extension local-storage

我有一个为该网页构建的网页和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

1 个答案:

答案 0 :(得分:0)

我假设您正在尝试访问当前有效标签的localStorage

您似乎想要查看特定网页的localStorage,无论该网页是否已打开。这样做似乎是处理事情的一种笨拙的方式,但如果这是你想要尝试的......

popup.html的上下文中执行此操作无效:它有自己的localStorage

要访问网页的localStorage,您需要将内容脚本注入页面。 如果未在标签中打开,您可以在背景页面的iframe中加载页面,可能正常工作。

请注意,您需要拥有应用网页的主机权限。

相关问题