Question

Im en train d'essayer de sauver le tab.url en html5 stockage local lorsque les charges de programme sont mis à jour puis un fichier css dans l'en-tête basé sur une règle, qui sont tous faciles à faire. Mais pour une raison quelconque la popup.html charge la variable de stockage local précédent et non celle récente.

Je me demandais si quelqu'un peut me aider à ce sujet, le code im en utilisant c'est;

<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>

Comme vous pouvez le voir son lien web vérificateur, il y a un peu css que je ne l'ai pas télécharger, il y a aussi beaucoup de php en utilisant ajax mais rien de tout cela est d'avoir un effet sur le code et j'ai aussi supprimé toute innerHTML les fonctions. Désolé d'avoir un grand morceau de code.

si quelqu'un pourrait me dire pourquoi html5 stockage local est la dernière sauvegarde, il serait d'une grande aide. J'ai essayé écho des données et donne juste sur les anciennes données et non la récente. Je me sens comme je l'ai frappé un mur de briques avec celui-ci.

Était-ce utile?

La solution

Tout d'abord, votre code est assez difficile à lire, s'il vous plaît travailler sur votre style de codage, par exemple:

  1. Utilisez plus de 1 espace pour par tiret
  2. Ne pas placer des choses sur la même ligne avec l'ouverture et la fermeture des accolades
  3. Utilisez des espaces autour ==, != etc.

Cela rendra votre code beaucoup plus lisible:)

Mais à votre problème:

// 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);

Vous avez besoin le plus susceptible de se déplacer le reste de la fonction loaded dans le rappel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top