href =“javascript:...”语法突然在FireFox中的FB Iframe中不起作用

时间:2011-10-27 16:04:33

标签: javascript asp.net facebook iframe

突然间,我所有的ASP.NET LinkBut​​tons(使用href = javascript:__ PostBack ...语法)都停止了所有FireFox用户(各种版本)的工作

我缩小了范围,发现只有所有 href = javascript:在FB iframe中无效。

示例:这里有一个简单的例子:https://apps.facebook.com/realmofempires_stg/(使用Firefox访问此页面以便自己查看)这是一个简单的HTML代码,其中JS调用alert('clicked')

<a onclick="alert('clicked');" >WORKS</a>

<a href="javascript:alert('clicked');" >does NOT WORK</a>

然而,这段代码在FB IFrame https://staging.realmofempires.com/chooserealm.aspx之外运行得非常好,或者在一个简单的Iframe https://staging.realmofempires.com/chooserealminiframe.aspx内,它可以在除FireFox之外的所有其他浏览器中工作

问题:为什么它在FF中不起作用?

html页面的确切代码:

<a onclick="alert('clicked');" >(1) WORKS: CLICK ME - How come this onclick=alert(a); works</a
<a href="javascript:alert('clicked');" >(2) DOES NOT WORK: href="javascript:alert('clicked');</a>

5 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

    $(function () {
        var isInIframe = (window.top != window);
        if ($.browser.mozilla && isInIframe) {
            $('a[href^="javascript:"]').each(function () {
                var newOnClick = $(this).attr('href').replace(/^javascript:/i, '');
                var existingOnClick = this.getAttribute('onclick');
                existingOnClick = (existingOnClick ? (existingOnClick + ';') : '') + newOnClick;
                this.setAttribute('onclick', existingOnClick);
            });
        }
    });

这是一个很好的例子。我的Facebook应用程序遇到了同样的问题。 我刚刚将这部分从[href ^ = javascript:]更改为[href ^ =“javascript:”] 而且效果很好。

答案 2 :(得分:1)

所以只需使用jQuery将其从href更改为click()或onclick代码。 : - )

编辑:试试这个jQuery:

$(function() { 
    var isInIframe = (window.top!=window); 
    if ($.browser.mozilla && isInIframe) {
        $('a[href^=javascript:]').each(function() { 
            var newOnClick = $(this).attr('href').replace(/^javascript:/i, ''); 
            var existingOnClick = $(this).attr('onclick'); 
            if (existingOnClick)
                newOnClick = existingOnClick + ';' + newOnClick; 
            $(this).attr('onclick', newOnClick); 
         }); 
    } 
});

它没有经过测试,它不是最有效的JS,但它是我现在可以管理的所有内容。

答案 3 :(得分:1)

GregL的想法很好。但是这个功能对我不起作用..... 我的浏览器是firefox 7.0.1,并使用jquery-ui-1.8.2。

我会尝试下面的代码

....
var existingOnClick = $(this).attr('onclick');
alert('existingOnClick');
....

在我的情况下,它显示功能onclick(事件){....点击代码...} 。不仅仅是我的点击代码

所以我修复了代码......

$(function() { 
var isInIframe = (window.top!=window); 
if ($.browser.mozilla && isInIframe) {
    $('a[href^=javascript:]').each(function() { 
        var newOnClick = $(this).attr('href').replace(/^javascript:/i, ''); 
        var existingOnClick = this.getAttribute('onclick'); 
        existingOnClick = (existingOnClick ? (existingOnClick + ';') : '') + newOnClick ;
        this.setAttribute('onclick', existingOnClick );
     }); 
} 
});

答案 4 :(得分:0)

同样运行FF 7.0.1对我来说既不起作用,但是一个小小的改变也让我在路上。

$(function () {
    var isInIframe = (window.top != window);
    if ($.browser.mozilla && isInIframe) {
        $("a").each(function () {
            var newOnClick = $("a").attr("href").replace(/javascript:/gi, '');
            var existingOnClick = this.getAttribute('onclick');
            existingOnClick = (existingOnClick ? (existingOnClick + ';') : '') + newOnClick;
            this.setAttribute('onclick', existingOnClick);
        });
    }
});

感谢上述海报