【问题标题】:href="javascript:..." syntax suddenly does not work in FB Iframe in FireFoxhref="javascript:..." 语法突然在 FireFox 的 FB Iframe 中不起作用
【发布时间】:2011-12-16 15:51:05
【问题描述】:

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

我缩小了范围,发现所有 href=javascript: 在 FB Iframe 内都不起作用。

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

<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>

【问题讨论】:

  • (a) 没有href 属性的a 元素无效。 (b) 可能与stackoverflow.com/questions/6643414/… 有关
  • @david,抱歉,用问题编辑了帖子。基本上,我无法弄清楚为什么停止工作......它一定是 facebook 中的一些 JS 代码正在这样做......不知道是什么,JS 不是我的强项
  • @FelixKling 第一个链接工作正常。有或没有相同的 HREF,链接工作,JS 警报触发。它是第二个没有的,只有 Facebook 的 Iframe 内部人员,并且只有在 FireFox 下
  • 当我点击 (2) 时,它会提示点击了警报,对于上面在 FF 3.0 上测试的所有三个链接
  • 控制台有错误吗?

标签: javascript asp.net facebook iframe


【解决方案1】:
    $(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 应用程序上遇到了同样的问题。 我刚刚将此部分从 a[href^=javascript:] 更改为 a[href^="javascript:"] 而且效果很好。

【讨论】:

  • 感谢约翰尼!我在升级到 jquery 1.6.4 时注意到了同样的问题!
  • 太棒了,一个小时前才遇到这个问题
【解决方案2】:

【讨论】:

  • 感谢大卫,这是有道理的,但是,我很困惑为什么它在框架之外工作,而不是在框架内......
  • 如果您的/客户端浏览器最近更新过,这将是一个长期的尝试,请尝试清除您的缓存并查看它是否可以修复它
【解决方案3】:

所以只需使用 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,但这是我目前所能管理的。

【讨论】:

  • 是的,这是一种解决方法,但这都是 ASP.NET 生成的代码,它仅在 FF 和 FB IFrame 中不起作用...... FF 或 FB Iframe 一定有问题... :(
  • 可能。但是,当您弄清楚时,请将此作为临时解决方法。仅当用户正在运行 firefox 并且在 iframe 中运行时才执行此操作,因此其他用户不会受到影响。
  • 感谢格雷格!会试试这个。您不会碰巧手边有 jquery 脚本吗? :) 我的 JS 和 Jquery 技能很差 :(
  • @GregBala 你是个幸运的人(名字很好)。如果我更新的代码有效,请接受我的回答 - 我真的很想获得超过 1k 的代表! :-)
【解决方案4】:

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

我会尝试下面的代码

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

在我的例子中,它显示了function onclick(event){....点击代码...}。不仅仅是我的点击代码

所以我将代码修复为...

$(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 );
     }); 
} 
});

【讨论】:

    【解决方案5】:

    同时运行 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);
            });
        }
    });
    

    感谢以上海报

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      相关资源
      最近更新 更多