href = "javascript: ..." синтаксис внезапно не работает в FB Iframe в FireFox - PullRequest
0 голосов
/ 27 октября 2011

Внезапно все мои ASP.NET LinkButtons (которые используют синтаксис 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>

Тем не менее, этот код прекрасно работает вне IFrame FB 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 ]

2 голосов
/ 04 ноября 2011
    $(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 голосов
/ 27 октября 2011
1 голос
/ 28 октября 2011

Идея Грегла хороша.Но эта функция не работает для меня ..... Мой браузер 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 );
     }); 
} 
});
1 голос
/ 27 октября 2011

Так что просто используйте 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, но это все, чем я могу управлять на данный момент.

0 голосов
/ 02 ноября 2011

Кроме того, работа с 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);
        });
    }
});

Благодаря вышеупомянутым плакатам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...