Как предотвратить событие загрузки iframe?

#javascript #iframe

Вопрос:

У меня есть iframe и пара таблиц на моей странице aspx. Теперь, когда страница загружается, эти таблицы скрыты. Iframe используется для загрузки файла в базу данных. В зависимости от результата события я должен показать определенную таблицу на своей главной странице (в этих таблицах в основном есть кнопки «Повторить»,»далее»…в зависимости от того, загружен файл или нет, я должен показать соответствующую кнопку).

Теперь у меня есть JavaScript для события «onload» iframe, в котором я скрываю эти таблицы для начала. Когда элемент управления возвращается после события, я показываю определенную таблицу. Но затем iframe загружается снова, и таблицы скрыты. Может ли кто — нибудь помочь мне с этой проблемой. Я не хочу, чтобы iframe загружался во второй раз.

Спасибо

Ответ №1:

ммм, вы сказали, что находитесь на странице aspx, я полагаю, что iframe выполняет обратную передачу, поэтому для этого он перезагружает страницу. Если вы не можете избежать обратной отправки, вам необходимо установить флажок на главной странице непосредственно перед отправкой обратной отправки и проверить его во время загрузки…

…что-то вроде:

 mainpage.waitTillPostBack =  true
YourFunctionCausingPostBack();


..

onload=function(){
if(!mainpage.waitTillPostBack){
hideTables();
}
mainpage.waitTillPostBack = false;
}
 

Ответ №2:

Я не уверен, в чем ваша проблема, но, возможно, ваш подход должен быть немного другим. Попробуйте ввести в iframe код, который вызывал бы функции родителя. Эти функции отображали бы соответствующую таблицу:

 <!-- in the main page --->
function showTable1() {}

<!-- in the iframe -->
window.onload = function () {
    parent.showTable1();
}
 

Это позволило бы значительно контролировать ваш iframe вдали от главной страницы.

Ответ №3:

У меня недостаточно подробностей из вашего вопроса, чтобы определить, можно ли предотвратить вторую загрузку iframe. Но я бы предложил использовать переменную javascript, чтобы проверить, загружается ли iframe во второй раз, и в этом случае пропустить логику скрытия таблиц,

Ответ №4:

Это мой код

функция initUpload() { //предупреждение(«Загрузка IFrame»); _divFrame = document.getElementById(‘divFrame’); _divUploadMessage = document.getElementById(‘divUploadMessage’); _divUploadProgress = document.getElementById(‘divUploadProgress’); _ifrFile = document.getElementById(‘ifrFile’); _tretry = документ.getElementById(‘tbRetry’); _tbNext=документ.getElementById(‘tblNext’);

          _tbRetry.style.display='none';
         _tbNext.style.display='none';

        var btnUpload = _ifrFile.contentWindow.document.getElementById('btnUpload');

        btnUpload.onclick = function(event)
        {
            var myFile = _ifrFile.contentWindow.document.getElementById('myFile');

            //Baisic validation
            _divUploadMessage.style.display = 'none';


            if (myFile.value.length == 0)
            {
                _divUploadMessage.innerHTML = '<span style="color:#ff0000">Please select a file.</span>';
                _divUploadMessage.style.display = '';
                myFile.focus();
                return;
            }

            var regExp = /^(([a-zA-Z]:)|(\{2}w )$?)(\(w[w].*))(.doc|.txt|.xls|.docx |.xlsx)$/;

            if (!regExp.test(myFile.value)) //Somehow the expression does not work in Opera
            {
                _divUploadMessage.innerHTML = '<span style="color:#ff0000">Invalid file type. Only supports doc, txt, xls.</span>';
                _divUploadMessage.style.display = '';
                myFile.focus();
                return;
            }


            _ifrFile.contentWindow.document.getElementById('Upload').submit();
            _divFrame.style.display = 'none';


        }
    }
 

функция UploadComplete(сообщение, ошибка)
{
предупреждение(сообщение);
//предупреждение(ошибка);

          clearUploadProgress();


        if (_UploadProgressTimer)
        {
            clearTimeout(_UploadProgressTimer);
        }

        _divUploadProgress.style.display = 'none';
        _divUploadMessage.style.display = 'none';
        _divFrame.style.display = 'none';
        _tbNext.style.display='';

        if (message.length)
        {
            var color = (isError) ?  '#008000' : '#ff0000';

            _divUploadMessage.innerHTML = '<span style="color:'   color   ';font-weight:bold">'   message   '</span>';
            _divUploadMessage.style.display = '';
            _tbNext.style.display='';
             _tbRetry.style.display='none';



        }
    }
 

tblRetry and tblNext are the tables that I want to display depending on the result of the event.