JavaScript修改一个文件中的变量并在另一个文件中读取它

时间:2016-01-02 05:07:32

标签: javascript

有没有办法修改函数中的全局变量然后在另一个页面中使用它?让我更好地解释一下我的情况:我有两个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>

问题在于,当我点击链接&#34; barbarianClass&#34;并且我的character.html页面显示,警报中显示的变量字符是&#34; initialValue&#34;,即使我说它具有值&#34;野蛮人&#34;在打开页面之前附加到链接的事件内部。当然,我有这个变量的计划,但对于这个问题,警报更容易。有人可以告诉我为什么保留initialValue?在JS中是否有任何模糊的规则说当你加载一个JS文档时,全局变量不能再被改变或类似的东西?我没有任何意义......

4 个答案:

答案 0 :(得分:1)

您可以在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'));

答案 1 :(得分:1)

你想要做的事情根本就不可能只使用变量,因为你的评论中有人突出显示的原因

  

让我们假设这是可能的 - 您是否希望通过其他页面上的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的到期时间。

答案 2 :(得分:1)

嗯......好吧......除了银行问题: - )

回答你的问题 - 答案是肯定和否定。如果你要做的是直接加载一个新的网页然后没有 - 你的全局变量将像棉花糖一样在一个carny show中消失。

BUT!相反,如果使用jQuery的getScript()函数,则可以加载新的网页并保留全局变量。您所要做的就是将传入的网页转换为十六进制,这样所有不同的字母(如小于号,单引号和双引号)都不会破坏,一旦拥有它就会转换,然后替换您的网页页面或插入您的网页/部分。

要将其转换为十六进制,您只需要PHP中的bin2hex()函数。要在Javascript中取消某些内容,您可以在GitHub上获取我的toHex()和fromHex()函数。

另外,您可能想要考虑将所有内容以十六进制形式发送回服务器,因此脚本小子更难以给自己+1000武器。只是一个想法。它不会减慢它们的速度 - 但每一点点都有帮助。 : - )

答案 3 :(得分:0)

您可以使用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