Почему при настройке src фрейма в js не отображается источник отображения?

#javascript #css #html #scripting

#javascript #css #HTML #сценарии

Вопрос:

Основываясь на условии JS, я хочу, чтобы произошло одно из двух действий;

  1. Либо для отображения фрейма на странице, ЛИБО
  2. Покажите ссылку «Показать pdf» на странице.. Показать pdf

Теперь, когда я знаю, как выполнить отображение / скрытие на основе условия JS, мой вопрос заключается в том, что в случае выполнения 2-го условия я хочу не только скрыть объект frame, НО и убедиться, что он также не загружен в фоновом режиме… Я думаю, что использование show / hide не помешает загрузке PDF в фоновом режиме.. Итак, мой вопрос в том, как я могу достичь этого с помощью Javascript?

********** Вот что я пытаюсь**********

 if(isiPad) 
        {     
        $('#content').attr('src','ipad_frame.html'); 
        } 
        else 
        {     
        $('#content').attr('src','xyz.pdf'); 
        } 
  

И в html у меня есть

  <frame src="#" title="Content Frame" name="content" id="content" />
  

Будет ли это нормально работать? По некоторым причинам я только что протестировал его, и, хотя он включен в часть if / else, он не отображает соответствующий контент..

Ответ №1:

Почему бы не добавлять элементы динамически в скрипте к элементу контейнера? Что-то вроде (предполагая, что вы используете jQuery):

 if(condition)
{
    $('#container').html('<html for frame>');
}
else
{
    $('#container').html('<html for pdf>');
}
  

Это гарантирует, что будет загружен только тот элемент, который вы хотите загрузить.

Комментарии:

1. упс .. и это то, что происходит, когда вы вводите код поздно ночью непосредственно в поля для ответов 😉

2. Разумно ли импортировать jQuery для чего-то настолько простого?

3. Короче говоря, конечно.. В противном случае просто используйте собственные функции элементов javascript

4. Спасибо за lot…No проблемы вообще с проблемами синтаксиса.. Также jQuery подходит для me..My единственный вопрос заключается в том, что когда мы говорим if ..else, одновременно может выполняться только одно условие .. но поскольку одно из них будет иметь ссылку «pdf» (<frame src=’xyz.pdf’), гарантирует ли этот подход, что pdf будет загружен только в том случае, если это условие выполнено, а не иначе…

5. @hmthr: PDF-файл будет загружен только после добавления элементов в DOM. Итак, нет, он не будет загружен, если условие не выполнено.

Ответ №2:

Вместо того, чтобы показывать / скрывать, вы могли бы использовать DOM для изменения содержимого страницы:

 <div id="frameWillBeHere">

</div>

<script language="javascript">

var f = document.getElementById('frameWillBeHere');

if (whatever) {
   f.innerHTML = '<iframe>pdf file</iframe>';
}
else {
   f.innerHTML = 'something else';
}

</script>
  

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

Комментарии:

1. Спасибо большое.. Но опять же, вопрос в том, что пока установлен f.innerHTML, фактическое содержимое не отображается … Не уверен, нужно ли мне вызывать функцию для определенного события?

2. Просто добавлю, что в браузере IE возникла проблема, т.Е. работает следующий document.getElementById(‘content2’).contentWindow. location = ‘ google.com ‘; Но локальный вызов html не работает, т.е.document.getElementById(‘content2’).contentWindow. location = ‘ipad_frame.html ‘;