3

如果有人可以帮助我,我对以下代码有疑问,我将不胜感激。基本上,我在调用 url 的页面上的几个页面上有几个链接。目前,/freeten/即使在窗口中打开了外部页面,它也只在代码部分中调用函数。

if(location.href.match('/extraten/')) {

    console.log(window.location.href);

    function downloadXM() {
        if(location.href.match('/en/')) {
            window.location.href = "http://core77.com/";
        }

        if(location.href.match('/fr/')) {
            window.location.href = "http://www.notcot.org/";
        }

        if(location.href.match('/de/')) {
            window.location.href = "http://www.spd.org/";
        }

        if(location.href.match('/it/')) {
            window.location.href = "http://sxsw.com/";
        }

    }
}

if(location.href.match('/freeten/')) {

    function downloadXM() {

        if(location.href.match('/en/')) {
            window.location.href = "http://www.wired.com/";
        }

        if(location.href.match('/fr/')) {
            window.location.href = "http://www.bbc.co.uk/";
        }

        if(location.href.match('/de/')) {
            window.location.href = "http://edition.cnn.com/";
        }

        if(location.href.match('/it/')) {
            window.location.href = "http://www.sky.com/";
        }

    }
}
4

4 回答 4

6

不要以这种方式声明函数,而是尝试这样做:

var myFunc;

if (something) {
    myFunc = function () { ... }
} else if (something) {
    myFunc = function () { ... }
}
于 2013-04-09T15:49:37.783 回答
1

最简单的改变就是这个。不优雅但可扩展的新手

function downloadXM()  {
  window.console && console.log(window.location.href); // helping IE 

  if (location.href.match('/extraten/')){     

    if (location.href.match('/en/')){    
      window.location.href= "http://core77.com/";
    }

    if (location.href.match('/fr/')) {  
      window.location.href= "http://www.notcot.org/";
    }

    if (location.href.match('/de/')) { 
      window.location.href= "http://www.spd.org/";
    }

    if (location.href.match('/it/')) { 
       window.location.href= "http://sxsw.com/";
    }    
  }

 else if (location.href.match('/freeten/')){     

    if (location.href.match('/en/')){    
        window.location.href= "http://www.wired.com/";
    }

    if (location.href.match('/fr/')) {  
        window.location.href= "http://www.bbc.co.uk/";
    }

    if (location.href.match('/de/')) { 
        window.location.href= "http://edition.cnn.com/";
    }

    if (location.href.match('/it/')) { 
        window.location.href= "http://www.sky.com/";
    }
}
于 2013-04-09T15:53:31.153 回答
0

Javascript 将函数声明提升到函数顶部,因此您的第一个声明downloadXM()被第二个覆盖downloadXM()。Javascript 没有任何块作用域,就像您尝试使用 if 语句所做的那样。

于 2013-04-09T15:46:56.693 回答
0

另一个项目,您正在使用.match(<RegExp>),它实际上为您正在使用的 RegExp 模式返回字符串中所有匹配项的数组。在这种情况下,您可能想要使用的是<RegExp>.test(),它返回true或返回falseRegExp 模式是否在字符串值中匹配。

使用您的代码中的一个示例:

if (location.href.match('/extraten/')) {

. . . 会成为:

if (/extraten/.test(location.href.match)) {

编辑- 我并不是说这是导致您的问题的原因,但是当我使用match(). 将其切换为使用test()解决了这些问题。

于 2013-04-09T15:58:11.583 回答