1

我花了 3 天时间试图解决这个简单的问题。我想要的只是让我的整个网站记住winversion全局变量值并能够从函数中更改它。(是的,我知道全局变量比 darthwader 更邪恶,但请这是我生命中唯一的好事)

我有一个带有 .html 的 html 文件<iframe>,当用户在里面点击时,我将不同的页面(来自我的域)加载到该<iframe>.

这是我的 index.html (它周围有几个 div,<iframe>但我很确定这无关紧要,因为其他一切都有效,而 javascript 仅适用于此<iframe>

 <script type="text/javascript" src='script.js'></script>
---------- ( some inner body html , not important)----------------

 <iframe id="myiframe" src="mainproblems.html" >

默认的 iFrame 页面有这个 html 代码

    <a href="#" onclick="setwinver('xp')";>I have  Windows XP </a>
    <a href="#" onclick="setwinver('win7')";> have Windows 7/Vista </a>

我的 script.js 是这个

 // This is supposed to be my global variable to hold windows version value
 var winversion ; 

    // This function (I officially hate it now) is supposed to change 
    // winversion variable based on what user clicked on the iFrame
    function setwinver(ver) 

{   
        //so now winversion should either have xp or win7 assigned
        winversion=ver; 
}

但后来,<iframe>当我尝试winversion在同一个 JavaScript 文件中读取时,它显示未定义。navigatenow()当用户在第 1 页选择 windows 版本并在下一个 html 页面中单击链接以启动 msconfig 描述页面(加载在 中)时触发此功能<iframe>

    function navigatenow()
{

        if (winversion == "xp")
    {
         window.location.href=("msconfigxp.html");
    }
    else
    {
        window.location.href=("msconfig7.html");
    }
}

我努力了:

  • 使用 / 不使用var.

  • 使用/不使用单引号,双引号(尽管我知道这没什么区别)。

  • 阅读了十几篇关于吊装的文章。

  • 使用 persistjs 几个小时。

  • 冥想和祈祷!

没有任何效果。该死的winversion变量仍然像我存在的目的一样未定义。

我想要的只是让我的 html 文件记住用户选择的 windows 版本(不,我无法以编程方式检测 windows 版本,我询问用户版本的目的是不同的)。

任何帮助将不胜感激解决此问题,如果没有,请建议一个合适的悬崖,我可以从中跳下。

4

2 回答 2

4

iframe 中的页面是一个单独的窗口,它不会继承索引页面的范围。您需要指定要转到父窗口并在那里使用脚本:

window.parent.setwinver('xp');

同样访问变量:

if (window.parent.winversion == "xp")

这是一个工作示例:http: //jsfiddle.net/ga62A/

索引页面加载这个 iframe: http: //jsfiddle.net/cMDvc/1/
然后你继续这个 igrame:http: //jsfiddle.net/9qjaX/

于 2012-09-15T10:38:57.313 回答
1

LePrince,当您更改页面时,JS 会丢弃所有更改内容的内存。JavaScript 被读入页面,但你不能从最终用户的浏览器回 JS 文件,因为那只会要求你的生活、你的网站和你所有的钱被盗。

您对阅读的原始代码所做的所有更改都存储在内存中。该记忆仅持续与页面持续时间一样长。之后,它再次重新加载页面,与以往一样。

如果您需要它做更多的事情,您可以首先从document.cookie. 它用于存储非常小的信息,而且使用起来并不有趣,除非您编写工具来获取 cookie 和设置 cookie。

接下来是localStorage,比较好用也比较新(但是老的IE不支持,所以windows 7的XP上的人用不了)。但这仍然只适用于一个用户的数据,不会改变任何其他用户的任何内容。

如果您希望能够添加... ...例如评论或星级,其他人可以看到帖子和评级以及上传的图像,那么您需要研究服务器端编程。Ruby(/Rails)、PHP、Node.js 等。

于 2012-09-15T11:13:30.437 回答