2009-05-22 2 views
1

Итак, в чистом HTML я могу создать форму, которая загружает свои результаты в iframe (вместо перемещения пользователя к URL-адресу результата).Почему загрузка HTML-формы в созданный Javascript iframe не поддерживается?

<html> 
    <head> 
    <title>Google Preview</title> 
    <style>iframe { width: 800px; height: 600px }</style> 
    </head> 
    <body> 
    <form method='get' action='http://www.google.com/search' target='results'> 
     <label for='q'>Google Search:</label> 
     <input name='q'/> 
    </form> 
    <!-- form result loads in this iframe --> 
    <iframe name='results'></iframe> 
    </body> 
</html> 

Я пытаюсь сделать подобное в Greasemonkey и сталкиваться с проблемами.

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

Я проследил проблему до использования Javascript для создания iframe. Кажется , чтобы вставить iframe в DOM просто отлично (и, глядя на firebug, сгенерированный источник почти идентичен приведенному выше, за исключением дополнительного тега <script>). Но когда я создаю iframe в Javascript, я получаю «открытые результаты в новой вкладке» .

<html> 
    <head> 
    <title>Google Preview</title> 
    <style>iframe { width: 800px; height: 600px }</style> 
    </head> 
    <body> 
    <form method='get' action='http://www.google.com/search' target='results'> 
     <label for='q'>Google Search:</label> 
     <input name='q'/> 
    </form> 
    <script> 
     try { 
     // form result doesn't load in this iframe, for some reason 
     const iframe = document.body.appendChild(document.createElement('iframe')); 
     iframe.name = 'results'; 
     } catch (e) { 
     alert(e); 
     } 
    </script> 
    </body> 
</html> 

Что нужно сделать, чтобы получить результаты для загрузки в iframe, созданные Javascript? (Я еще не пробовал document.write(), но я не уверен, что это было бы очень полезно от Greasemonkey).

обновление: Итак, я попытался найти document.write(), и он работает. Так что, может быть, я просто должен выяснить, как использовать, что из GreaseMonkey (не портя мое множество элементов DOM У меня есть дескрипторы)

<html> 
    <head> 
    <title>Google Preview</title> 
    <style>iframe { width: 800px; height: 600px }</style> 
    </head> 
    <body> 
    <form method='get' action='http://www.google.com/search' target='results'> 
     <label for='q'>Google Search:</label> 
     <input name='q'/> 
    </form> 
    <script> 
     try { 
     // but form result will load in this iframe 
     document.write('<iframe name="results"></iframe>'); 
     } catch (e) { 
     alert(e); 
     } 
    </script> 
    </body> 
</html> 

Я все еще хочу знать, почему document.body.appendChild() не работает , но document.write() ...

обновление: это, кажется, не только форма, я могу заменить ссылку в вместо <form>...</form> и получить те же результаты для всех трех случаев

<div><a target="results" href="http://www.google.com">test</a></div> 

ответ

1

Хорошо, я нашел удовлетворительное решение. Мне нужно определить имя iframe до Я звоню appendChild().

<html> 
    <head> 
    <title>Google Preview</title> 
    <style>iframe { width: 800px; height: 600px }</style> 
    </head> 
    <body> 
    <div><a target="results" href="http://www.google.com">test</a></div> 
    <script> 
     try { 
     // this works 
     const iframe = document.createElement('iframe'); 
     iframe.name = 'results'; 
     document.body.appendChild(iframe); 
     } catch (e) { 
     alert(e); 
     } 
    </script> 
    </body> 
</html> 

Я не уверен, почему установка имя после добавления его в документ не работал (а я все еще хотел бы знать если кто-то там хочет 15pts), но это позволяет мне получить на с моей GreaseMonkeying, так что это достаточно хорошо.

-1

хммм я» m мышление, потому что оно все равно отправляется обратно к себе, поэтому кадр никогда не создается (поскольку форма создается и отображается на странице при каждой обратной передаче)

+0

Если это было сообщение обратно к себе, не должна ли быть в истории браузера версия перед отправкой (та, в которой я отправил форму, которая уже имела iframe)? Ничто не добавляется в историю браузера, и это заставляет меня думать, что это не так. – rampion

+0

Я просто проверил это, вставив 'alert()' в тег скрипта. Предупреждение появляется только один раз (когда я загружаю страницу), а не после того, как я отправлю форму, что делает меня достаточно уверенным, что нет обратной передачи. – rampion

Смежные вопросы