Javascript Chrome扩展:Chrome.storage.local.get头痛
试图构建一个简单的Chrome扩展来输出localStorage的全部内容 这应该有多困难?花了几个小时进行研究和尝试,但仍然不起作用:( 感谢您的帮助 例如:Javascript Chrome扩展:Chrome.storage.local.get头痛,javascript,google-chrome-extension,local-storage,google-chrome-storage,Javascript,Google Chrome Extension,Local Storage,Google Chrome Storage,试图构建一个简单的Chrome扩展来输出localStorage的全部内容 这应该有多困难?花了几个小时进行研究和尝试,但仍然不起作用:( 感谢您的帮助 例如: function load() { chrome.storage.local.get(null, function(items) { var allKeys = Object.keys(items); alert(allKeys.count); }); } document.addEventListener(
function load() {
chrome.storage.local.get(null, function(items) {
var allKeys = Object.keys(items);
alert(allKeys.count);
});
}
document.addEventListener('DOMContentLoaded', () => {
load();
});
输出“未定义”
我尝试过的其他一些方法实际上包含了一个对象,但我无法使用它(没有count/length、没有JSON.stringify、没有toString()等等)
舱单:
"permissions": [
"activeTab",
"storage",
"tabs",
"http://*/*",
"https://*/*",
"chrome://favicon/"
]
如何在扩展弹出窗口中输出整个本地存储
请帮忙!你能试试
所有键的长度吗
Object.key(items)
将返回一个数组。默认情况下,数组没有属性count
。我想你的意思是length
如果您需要网页的本地存储(加载到选项卡中的域),而不是扩展页的本地存储,我认为您无法做到这一点
Iván Nokonoko有一个很好的观点,即您需要注入脚本以与加载的网页交互,但是问题是注入的脚本被迫在隔离的环境中运行,在该环境中,您只能访问DOM树,但无法访问原始JS环境,因此localStorage
您可以得到的变量是您自己的隔离环境中的变量,而不是原始变量
引自:
但是,内容脚本有一些限制。它们不能:
- 使用由网页或其他内容脚本定义的变量或函数
我相信注入代码与内容脚本具有相同的限制
我认为这个限制是出于安全考虑。将DOM树公开给扩展是可以的,在最坏的情况下,扩展会破坏视图。但是如果将JS环境(例如本地存储)公开给扩展,那么这可能是危险的,因为扩展能够访问/篡改数据。您能尝试一下allKeys.length
Object.key(items)
将返回一个数组。默认情况下,数组没有属性count
。我想你的意思是length
如果您需要网页的本地存储(加载到选项卡中的域),而不是扩展页的本地存储,我认为您无法做到这一点
Iván Nokonoko有一个很好的观点,即您需要注入脚本以与加载的网页交互,但是问题是注入的脚本被迫在隔离的环境中运行,在该环境中,您只能访问DOM树,但无法访问原始JS环境,因此localStorage
您可以得到的变量是您自己的隔离环境中的变量,而不是原始变量
引自:
但是,内容脚本有一些限制。它们不能:
- 使用由网页或其他内容脚本定义的变量或函数
我相信注入代码与内容脚本具有相同的限制
我认为这个限制是出于安全考虑。将DOM树公开给扩展是可以的,在最坏的情况下,扩展会弄乱视图。但是如果将JS环境(例如本地存储)公开给扩展,那么可能会很危险,因为扩展能够访问/篡改数据。显示当前的本地存储“活动”选项卡,请尝试:
chrome.tabs.executeScript({code:'JSON.stringify(localStorage)'},function(result) {
console.log(JSON.parse(result[0]));
});
工作示例:
popup.html
<body>
<div id=ls></div>
<script src="popup.js"></script>
</body>
popup.js
chrome.tabs.executeScript({code:'JSON.stringify(localStorage)'}, res => {
var ls = document.querySelector("#ls"), lsObj = JSON.parse(res[0]), lsHtml = "";
for (var key in lsObj)
lsHtml += "<p>" + key + " : " + lsObj[key] + "</p>";
ls.innerHTML = lsHtml ? lsHtml : "The active tab has nothing in localStorage";
});
chrome.tabs.executeScript({code:'JSON.stringify(localStorage)'),res=>{
var ls=document.querySelector(#ls),lsObj=JSON.parse(res[0]),lsHtml=“”;
for(lsObj中的var键)
lsHtml+=“”+key+”:“+lsObj[key]+””;
ls.innerHTML=lsHtml?lsHtml:“活动选项卡在本地存储中没有任何内容”;
});
要显示当前活动选项卡的本地存储,请尝试:
chrome.tabs.executeScript({code:'JSON.stringify(localStorage)'},function(result) {
console.log(JSON.parse(result[0]));
});
工作示例:
popup.html
<body>
<div id=ls></div>
<script src="popup.js"></script>
</body>
popup.js
chrome.tabs.executeScript({code:'JSON.stringify(localStorage)'}, res => {
var ls = document.querySelector("#ls"), lsObj = JSON.parse(res[0]), lsHtml = "";
for (var key in lsObj)
lsHtml += "<p>" + key + " : " + lsObj[key] + "</p>";
ls.innerHTML = lsHtml ? lsHtml : "The active tab has nothing in localStorage";
});
chrome.tabs.executeScript({code:'JSON.stringify(localStorage)'),res=>{
var ls=document.querySelector(#ls),lsObj=JSON.parse(res[0]),lsHtml=“”;
for(lsObj中的var键)
lsHtml+=“”+key+”:“+lsObj[key]+””;
ls.innerHTML=lsHtml?lsHtml:“活动选项卡在本地存储中没有任何内容”;
});
chrome.storage.local
与localStorage
不同。要查看扩展的本地存储,可以使用chrome.storage.local(null,a=>console.log(a))
或者,对于localStorage,只需console.log(localStorage)
我的意思是chrome.storage.local.get(null,a=>console.log(a))
@IvánNokonoko我不想要扩展的本地存储-我需要页面的全局存储(启动扩展时在Chrome中打开的域)。哪个页面?如果它是扩展以外的网页,则必须使用chrome.storage.local
与localStorage
不同。要查看扩展的本地存储,可以使用chrome.storage.local(null,a=>console.log(a))
或仅使用console.log(localStorage)查看本地存储
我的意思是chrome.storage.local.get(null,a=>console.log(a))
@IvánNokonoko我不想要扩展的本地存储-我需要页面的全局存储(启动扩展时在chrome中打开的域)。哪个页面?如果它是扩展以外的网页,则必须使用allKeys.length返回0。我认为我提取本地存储的方法不正确。我见过Chrome扩展可以这样做-它们显示当前打开的Chrome选项卡的cookie/localStorage信息。因此应该有一种方法。allKeys.length返回0。我认为我的方法是f提取本地存储不正确。我看到了Chrome ext