1

浏览了这些问题,关于“ReferenceError foo is not defined”的主题几乎没有类似的问题。但是,我无法检测到代码中的错误并使其正常工作。它在 Chrome 和 Safari 中运行良好,但在 IE、Opera 和 Firefox 中则不行:

HTML 中的代码

<a href="javascript:foo(1)" target="_parent">

将放置在标头中的 javascript 称为

<script type="text/javascript" src="http://www.site.com/include/script.js"></script>

定义如下:

function foo(language){
    url = window.parent.location.href;
    parts = url.split('/');
    page = parts[3];

    newUrl = "";

    if (language == 1){
        newUrl = "http://www.site1.com/" + page;
    } else if (language == 2){
        newUrl = "http://www.site2.com/" + page;
    } else{
        newUrl = "http://www.site3.com/" + page;
    }

    window.parent.window.location.href = newUrl;
}

阅读我测试的相关问题以更改为window.foo = function(language){...},但没有帮助。

看起来很简单,而且很简单,但出于某种原因, foo 在 IE 和 firefox 中是未定义的。

应该补充一点,javascript 位于“top.html”中,它是每个页面的嵌入式 iframe。chrome 以某种方式管理这个,而 IE 没有(但如果我浏览到http://www.site1.com/top.html并单击调用重定向(语言)的按钮,脚本可以工作;)

4

2 回答 2

1

您的问题是链接是有针对性的(有target="_parent"一点)。

这意味着它在目标窗口的范围内运行,而不是在它所在的窗口中运行。并且没有在那里命名的函数foo

于 2013-11-20T19:57:28.680 回答
0

看起来您的链接位于“iframe”标签中,但该foo函数是在顶级窗口对象的范围内定义的。

有两种方法可以解决此问题:

您应该使用window.partent引用顶级窗口对象,尝试将链接更改为

<a href="javascript:window.partent.foo(1)" target="_parent">

或者,将函数代码移动到与链接相同的 html 文件的头标记。

顺便说一句,您应该使用var关键字来声明变量。

于 2013-11-20T09:15:27.920 回答