Некоторое исправление о jquery и iframe? - PullRequest
1 голос
/ 15 января 2012

Я создаю простой скрипт greasemonkey, к нему прикреплено новое меню на странице, при нажатии на него будет отображаться iframe, я хочу убедиться, что при щелчке по меню iframe уже полностью загружен, поэтому я создал это

$('<div id="googleBar"><iframe id="googleBarFrame" scrolling="no" frameborder="0" src="http://support.google.com/plus/bin/answer.py?hl=en&amp;answer=1053549"></iframe></div>').insertBefore('#pagelet_welcome_box');

$('#googleBarFrame').load(function() 
{
    $('#pageNav').prepend('<li id="navShare" class="topNavLink middleLink"><a accesskey="1" >Google+ Share</a></li>');
});

//This not working
var toggle = false;
$('#navShare').click(function() {
    if (toggle) {
        $("#googleBar").animate({
        height: '30px',
        }, 500 );
    toggle = false;
    }
    else {
        $("#googleBar").animate({
        height: '250px',
        }, 500 );
    toggle = true;
    }
});

но это не работает, и это мой рабочий скрипт, но без возможности определения загрузки iframe

$('#pageNav').prepend('<li id="navShare" class="topNavLink middleLink"><a accesskey="1" >Google+ Share</a></li>');

$('<div id="googleBar"><iframe id="googleBarFrame" scrolling="no" frameborder="0" src="http://support.google.com/plus/bin/answer.py"></iframe></div>').insertBefore('#pagelet_welcome_box');

var toggle = false;
$('#navShare').click(function() {
    if (toggle) {
        $("#googleBar").animate({
        height: '30px',
        }, 500 );
    toggle = false;
    }
    else {
        $("#googleBar").animate({
        height: '250px',
        }, 500 );
    toggle = true;
    }
});

1 Ответ

0 голосов
/ 15 января 2012

Ну ... обработка событий в greasemonkey не легка.Если вы хотите связать обратный вызов с событием загрузки для iframe, попробуйте что-то подобное

function callback() {
    $('#pageNav').prepend('<li id="navShare" class="topNavLink middleLink"><a accesskey="1" >Google+ Share</a></li>');
}
document.getElementById('googleBarFrame').addEventListener('load', callback, false);

Я не проверял это, поэтому он может не работать из-за чего-то глупого (например, я неконечно, если имя события, переданное в «addEventListener», равно «load» или «onload»).

Этот метод (addEventListener) работал для меня с событием «click» в greasemonkey, поэтому он также может работать с событием load.

...