簡體   English   中英

JavaScript修改一個文件中的變量並在另一個文件中讀取它

[英]JavaScript modifying a variable in one file and reading it in another

有沒有辦法在函數中修改全局變量然后在另一個頁面中使用它? 讓我更好地解釋一下我的情況:我有兩個HTML文件,“Index.html”和“character.html”。 在Index中,我已經關聯了這個JS代碼:

var pcharacter = "initialValue";

document.getElementById("barbarianClass").onclick = function(event){
    event.preventDefault();
    pcharacter = "barbarian"; // the important line here...
    location.href = "pages/character.html";
}

元素“barbarianClass”是一個鏈接,這就是為什么我用preventDefault()阻止了默認行為,直到我給了我的pcharacter var一個值。 現在,我有character.html,它附加了以下一個單獨的JS代碼:

alert(pcharacter);

在character.html中,我有兩個JS文件相關,它應該如何完成:

<script type="text/javascript" src="indexCode.js"></script>
<script type="text/javascript" src="charsCode.js"></script>

問題是,當我點擊鏈接“barbarianClass”並且我的character.html頁面顯示時,警報中顯示的變量字符是“initialValue”,即使我說它在附加到事件的事件中具有值“野蠻人”打開頁面前鏈接。 當然,我有這個變量的計划,但對於這個問題,警報更容易。 有人可以告訴我為什么保留initialValue? 在JS中是否有任何模糊的規則說當你加載JS文檔時,全局變量不能再被更改或類似的東西? 我沒有任何意義......

您可以將數據保存在cookie中

function setCookie(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  var expires = "expires="+d.toUTCString();
  document.cookie = cname + "=" + cvalue + "; " + expires;
}

function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for(var i=0; i<ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1);
    if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
  }
  return "";
}

http://www.w3schools.com/js/js_cookies.asp

你的代碼將是

/*save data*/
document.getElementById("barbarianClass").onclick = function(event){
  event.preventDefault();
  setCookie('pcharacter', 'barbarian', 1)
  location.href = "pages/character.html";
}

/*get data*/
alert(getCookie('pcharacter'));

你想要做的就是單獨使用變量是不可能的,因為你的評論中有人強調了這一點

讓我們假設這是可能的 - 您是否希望通過其他頁面上的javascript變量訪問您的銀行詳細信息的頁面?

您應該使用cookie(客戶端)或會話(服務器端)來完成此任務。 這是你在javascript中設置cookie的方法:

document.cookie = "pcharacter=barbarian"

然后你可以通過這個簡單的函數訪問所有其他頁面中的這個cookie:

function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1);
    if (c.indexOf(name) == 0) return    
    c.substring(name.length,c.length);
}
return "";
}

console.log(getCookie("pcharacter"));

您還可以設置Cookie的到期時間。

嗯......好吧......銀行問題放在一邊:-)

回答你的問題 - 答案是肯定和否定。 如果你要做的是直接加載到一個新的網頁然后沒有 - 你的全局變量將像棉花糖一樣在一個carny show中消失。

但! 相反,如果使用jQuery的getScript()函數,則可以加載新的網頁並保留全局變量。 您所要做的就是將傳入的網頁轉換為十六進制,這樣所有不同的字母(如小於號,單引號和雙引號)都不會破壞,一旦擁有它就會轉換,然后替換您的網頁頁面或插入您的網頁/部分,如您所願。

要將其轉換為十六進制,您只需要PHP中的bin2hex()函數。 要在Javascript中取消某些內容,您可以在GitHub上獲取我的toHex()和fromHex()函數。

此外,您可能還想考慮將所有內容以十六進制形式發送回服務器,因此腳本小子在給自己+1000武器時會有點困難。 只是一個想法。 它不會減慢它們的速度 - 但每一點點都有幫助。 :-)

您可以使用localStorage將數據從一個文件傳遞到另一個文件。 基本語法是:

if (typeof(Storage) !== "undefined") {
    // Code for localStorage/sessionStorage.
} else {
    // Sorry! No Web Storage support..
}

設定值:

localStorage.setItem('myObj', 'My Object');

獲得一個價值:

localStorage.getItem('myObj');

如果不支持localStorage,您可以隨時回退到其中一個cookie或URL重寫。 否則你也可以使用window.name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM