为什么本地存储在javascript之后保存时间最长

为什么本地存储在javascript之后保存时间最长,javascript,html,upload,google-chrome-extension,local-storage,Javascript,Html,Upload,Google Chrome Extension,Local Storage,我目前正试图在程序加载时将tab.url保存到html5本地存储中,然后根据规则将css文件更新到标题中,这一切都很容易做到。但是由于某些原因,popup.html加载的是以前的本地存储变量,而不是最近的一个 我想知道是否有人能在这方面帮助我,我使用的代码是这样的 <script language="javascript"> var rule; var links; var search; function loadcssfile(filename, filetype) {

我目前正试图在程序加载时将tab.url保存到html5本地存储中,然后根据规则将css文件更新到标题中,这一切都很容易做到。但是由于某些原因,popup.html加载的是以前的本地存储变量,而不是最近的一个

我想知道是否有人能在这方面帮助我,我使用的代码是这样的

<script language="javascript">
var rule;
var links;
var search;

function loadcssfile(filename, filetype)
{ 
   if (filetype == "css")
   {   
       var fileref=document.createElement("link");
       fileref.setAttribute("rel", "stylesheet");
       fileref.setAttribute("type", "text/css");
       fileref.setAttribute("href", filename);
   }

   if (typeof fileref != "undefined")
   {   
       document.getElementsByTagName("head")[0].appendChild(fileref);
   }
}

function loaded()
{   
    chrome.tabs.getSelected(null,function(tab) 
    {   
        var temp;
        temp = tab.url;
        localStorage['tab'] = temp;
        console.log(temp);
    });

    links = localStorage['tab'];
    rule = localStorage['ok0'];
    search = links.indexOf(rule);

    if(search != -1)
    {   
        loadcssfile("./css/styles.css","css");
        loadcssfile("./button/styles2.css","css");
    }
    else
    { 
        // or load other css file 
    }
}

document.getElementById('datacontent').innerHTML = rule + "<br>" + links + "<br>" + search;


function createXMLHttpRequest()
{ 
    if (window.ActiveXObject)
    {   
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest)
    {   
        xmlHttp = new XMLHttpRequest();
    }
}

function createXMLHttpRequest2()
{  
    if (window.ActiveXObject)
    {   
        xmlHttp2 = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest)
    {   
        xmlHttp2 = new XMLHttpRequest();
    }
}

function handleStateChange1() 
{ 
   if(xmlHttp.readyState == 4 && xmlHttp.status == 200 ) 
   {   
       var data;
       data = xmlHttp.responseText;
       document.getElementById('container').innerHTML = data;
   }
}

function senddata(id)
{ 
   createXMLHttpRequest();
   xmlHttp.onreadystatechange = handleStateChange1;
   xmlHttp.open("GET", "http://weblinkchecker.forum-source.tk/crawler.php?link=" + links.replace('&','0123456789abcdef'), true);
   xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   xmlHttp.send("&type=anythinghere&anothervar=datahere");
   document.getElementById(id).innerHTML = "Successful !";
}  

function handleStateChange2() 
{ 
   if(xmlHttp2.readyState == 4 && xmlHttp2.status == 200 ) 
   {   
       var data;
       data = xmlHttp2.responseText;
       document.getElementById('container2').innerHTML = data;
   }
}

function sendForLinks()
{ 
   createXMLHttpRequest2();
   xmlHttp2.onreadystatechange = handleStateChange2;
   xmlHttp2.open("GET", "http://weblinkchecker.forum-source.tk/links.php?link=" + links.replace('&','0123456789abcdef'), true);
   xmlHttp2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   xmlHttp2.send("type=anythinghere&anothervar=datahere");
}

window.onload = function()
{ 
   loaded();
}

</script>

var规则;
var链接;
var搜索;
函数loadcssfile(文件名、文件类型)
{ 
如果(文件类型==“css”)
{   
var fileref=document.createElement(“链接”);
setAttribute(“rel”、“样式表”);
fileref.setAttribute(“类型”、“文本/css”);
fileref.setAttribute(“href”,文件名);
}
if(fileref的类型!=“未定义”)
{   
document.getElementsByTagName(“head”)[0].appendChild(fileref);
}
}
函数加载()
{   
chrome.tabs.getSelected(空,函数(选项卡)
{   
无功温度;
temp=tab.url;
本地存储['tab']=temp;
控制台日志(temp);
});
links=localStorage['tab'];
规则=本地存储['ok0'];
搜索=links.indexOf(规则);
如果(搜索!=-1)
{   
loadcssfile(“./css/styles.css”、“css”);
loadcssfile(“./button/styles2.css”、“css”);
}
其他的
{ 
//或加载其他css文件
}
}
document.getElementById('datacontent')。innerHTML=rule+“
”+links+“
”+搜索; 函数createXMLHttpRequest() { if(window.ActiveXObject) { xmlHttp=新的ActiveXObject(“Microsoft.xmlHttp”); } else if(window.XMLHttpRequest) { xmlHttp=新的XMLHttpRequest(); } } 函数createXMLHttpRequest2() { if(window.ActiveXObject) { xmlHttp2=新的ActiveXObject(“Microsoft.XMLHTTP”); } else if(window.XMLHttpRequest) { xmlHttp2=新的XMLHttpRequest(); } } 函数handleStateChange1() { if(xmlHttp.readyState==4&&xmlHttp.status==200) { var数据; data=xmlHttp.responseText; document.getElementById('container').innerHTML=data; } } 函数senddata(id) { createXMLHttpRequest(); xmlHttp.onreadystatechange=handleStateChange1; open(“GET”http://weblinkchecker.forum-source.tk/crawler.php?link=“+links.replace('&','0123456789abcdef'),true); setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”); send(“&type=anythinghere&anothervar=datahere”); document.getElementById(id).innerHTML=“成功!”; } 函数handleStateChange2() { if(xmlHttp2.readyState==4&&xmlHttp2.status==200) { var数据; 数据=xmlHttp2.responseText; document.getElementById('container2')。innerHTML=data; } } 函数sendForLinks() { createXMLHttpRequest2(); xmlHttp2.onreadystatechange=handleStateChange2; xmlHttp2.open(“GET”http://weblinkchecker.forum-source.tk/links.php?link=“+links.replace('&','0123456789abcdef'),true); setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”); send(“type=anythinghere&anothervar=datahere”); } window.onload=函数() { 加载(); }
正如您所看到的,它是一个web链接检查器,有一些css我没有上传,还有很多使用ajax的php,但这些都不会影响代码,我还删除了任何innerHTML函数。很抱歉有这么大的一段代码


如果有人能告诉我为什么html5本地存储是最后保存的,那将是一个巨大的帮助。我试着回显数据,它只是给出了旧数据,而不是最近的数据。我觉得这一点让我触目惊心。

首先,您的代码很难阅读,请改进您的编码风格,例如:

  • 每个缩进使用超过1个空格
  • 不要把东西放在同一条线上,用大括号开合
  • ==
    周围使用空格=
  • 这将使您的代码更具可读性:)

    但是关于你的问题:

    // this looks like a callback....
    chrome.tabs.getSelected(null,function(tab) { 
        var temp;
        temp = tab.url;
        localStorage['tab'] = temp;
        console.log(temp);
    });
    
    // this will most likely get executed BEFORE the callback gets called
    // therefore the values just hasn't been changed yet
    links = localStorage['tab'];
    rule = localStorage['ok0'];
    search = links.indexOf(rule);
    

    您很可能需要将加载的
    函数的其余部分移到回调中。

    首先,您的代码很难阅读,请改进您的编码风格,例如:

  • 每个缩进使用超过1个空格
  • 不要把东西放在同一条线上,用大括号开合
  • ==
    周围使用空格=
  • 这将使您的代码更具可读性:)

    但是关于你的问题:

    // this looks like a callback....
    chrome.tabs.getSelected(null,function(tab) { 
        var temp;
        temp = tab.url;
        localStorage['tab'] = temp;
        console.log(temp);
    });
    
    // this will most likely get executed BEFORE the callback gets called
    // therefore the values just hasn't been changed yet
    links = localStorage['tab'];
    rule = localStorage['ok0'];
    search = links.indexOf(rule);
    

    您很可能需要将
    加载的
    函数的其余部分移到回调中。

    很抱歉,我编辑了页面,因此现在看起来更整洁了。此外,该解决方案工作正常,通过将loaded()函数放入回调函数和将回调函数放入window.onload函数来实现。谢谢你的帮助。很抱歉,我编辑了这个页面,现在看起来更整洁了。此外,该解决方案工作正常,通过将loaded()函数放入回调函数和将回调函数放入window.onload函数来实现。谢谢你的帮助。如果伊沃的答案对你有用,请别忘了接受它。:)是的,这是一个巨大的帮助,我想我仍然需要习惯使用chrome扩展,尽管Ivo的答案对你有用,请不要忘记接受它。:)是的,这是一个巨大的帮助,我想我仍然需要习惯使用chrome扩展