Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展:Chrome.storage.local.get头痛_Javascript_Google Chrome Extension_Local Storage_Google Chrome Storage - Fatal编程技术网

Javascript Chrome扩展:Chrome.storage.local.get头痛

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(

试图构建一个简单的Chrome扩展来输出localStorage的全部内容

这应该有多困难?花了几个小时进行研究和尝试,但仍然不起作用:(

感谢您的帮助

例如:

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