Откройте новую вкладку / окно и закройте старую

Вот мой текущий код, ноcloseWindow Функция выполняется перед открытием новой вкладки.

    $(document.body).append('<iframe width="500px" height="500px" id="pcl_frame" style="display:none;"></iframe>');
    $('#pcl_frame').attr('src', data['url']);
    $('#pcl_frame').load(function() {
        // Load page
        document.getElementById('pcl_frame').contentWindow.CreateCBTPlayer(data['code'],"new");

        // Close current windows after the above tab/window opens
        closeWindow(); // has a 2 second delay
}); 

Есть ли способ подождать, пока приведенная выше команда сначала откроет новую вкладку / окно, а затем закроет текущую вкладку, которая использовалась для открытия нового окна.

Также я не могу изменитьCreateCBTPlayer функция.

отказ

Я знаю, что я делаю не очень логично, но это нужно сделать, чтобы обойти старую систему, с которой мне приходится работать.

 Pablo Martínez19 окт. 2012 г., 01:48
Какой тип элемента '#pcl_frame'?
 adeneo19 окт. 2012 г., 01:50
Вам нужно быть более конкретным, для чего конкретно этот код? Кроме того, вы знаете, чтоdocument.getElementById('pcl_frame') будет равноthis в этом контексте?
 Mint19 окт. 2012 г., 01:54
О нет, я все еще новичок в jQuery / javascript, спасибо. Код загружает данные ['url'], который является URL-адресом в том же домене, а затем, когда этот URL-адрес полностью загружен в iFrame, я запускаю функцию CreateCBTPlayer из iFrame, так как именно здесь находится эта функция, эта функция затем открывает новую вкладку, после чего я хочу закрыть текущую вкладку.
 Mint19 окт. 2012 г., 01:49
Это iFrame (обновил пост)
 Barmar19 окт. 2012 г., 01:51
Может дать новое окноonload обработчик, который закрывает старое окно.

Ответы на вопрос(2)

Решение Вопроса

но я думаю, что вы можете сделать что-то вроде этого:

(function(old_window) { 
    $(new_window).load(function() {
         old_window.close();
    });
})(window);

Внешняя самозвонящая анонимная функция используется для привязки локальной переменнойold_window к текущему объекту окна. Внутренняя функция - это замыкание, которое фиксирует эту привязку и закрывает окно. Это закрытие связано с новым окномonload мероприятие. Поэтому, когда новое окно загружается, оно закрывает текущее окно.

 Mint19 окт. 2012 г., 02:34
Можете ли вы объяснить, что делает каждая часть этого кода?
 Barmar19 окт. 2012 г., 03:10
См. Объяснение добавлено в ответ. Извините, но закрытие трудно объяснить.

что вы пытаетесь сделать, но я предполагаю, что вы должны установить источник после функции onload, чтобы он работал правильно, и так какload() устарела, и вы все равно используете нативный объект, почему бы просто не сделать это простым js:

var iframe = document.createElement('iframe');
    iframe.width = '500px';
    iframe.height = '500px';
    iframe.id = 'pcl_frame';
    iframe.style.display = 'none'; //note that not all browsers load hidden content
    iframe.onload = function() {
        this.contentWindow.CreateCBTPlayer(data['code'],"new");
        closeWindow();
    }

$('body').append(iframe).attr('src', data['url']);
 Mint19 окт. 2012 г., 02:33
Этот код не работает. Тестирование в IE8. Я получаю ошибкуObject doesn't support property or method 'CreateCBTPlayer'
 Mint19 окт. 2012 г., 03:02
Поверьте мне, если бы у меня был выбор, я бы использовал IE10 или, что еще лучше, Chrome или Firefox.
 Mint19 окт. 2012 г., 03:41
С помощьюiframe вместоthis привело к той же ошибке. Есть еще мысли?
 adeneo19 окт. 2012 г., 02:55
Так что вы говорите, что вы используете действительно устаревший браузер, и в этом браузере ваша функция CreateCBTPlayer не работает? Попробуйте просто заменитьthis с участиемiframeи посмотрите, решит ли это это, иначе проблема в вашей функции, а не в моем коде.

Ваш ответ на вопрос