لماذا يحفظ التخزين المحلي آخر بعد JavaScript
-
28-09-2019 - |
سؤال
أحاول حاليًا حفظ علامة التبويب. ولكن لسبب ما ، يقوم 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>
كما يمكنك أن ترى مدقق ارتباط الويب الخاص به ، هناك بعض css لم أقم بتحميله ، وأيضًا هناك الكثير من PHP باستخدام Ajax ولكن لا يوجد أي من هذا التأثير على الكود ، كما قمت بإزالة أي وظائف InnerHTML. آسف لوجود مثل هذه الرمز الكبير.
إذا كان بإمكان أي شخص أن يخبرني لماذا تقوم التخزين المحلي HTML5 بتوفيره ، فسيكون ذلك بمثابة مساعدة كبيرة. لقد حاولت صدى البيانات ويعطي البيانات القديمة وليس الحديث. أشعر أنني ضربت جدار من الطوب مع هذا الجدار.
المحلول
أولاً ، من الصعب القراءة الكود الخاص بك ، يرجى العمل على نمط الترميز الخاص بك ، على سبيل المثال:
- استخدم أكثر من مساحة واحدة لكل مسافة بادئة
- لا تضع أشياء على نفس الخط مع فتحة وإغلاق الأقواس المجعد
- استخدم المساحات حولها
==
,!=
إلخ.
هذا سيجعل الكود الخاص بك أكثر قابلية للقراءة :)
لكن على مشكلتك:
// 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
تعمل في رد الاتصال.