Почему HTML-форма не загружается в созданный Javascript iframe? - PullRequest
1 голос
/ 22 мая 2009

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

<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() работает.

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

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

Ответы [ 2 ]

1 голос
/ 23 мая 2009

Хорошо, я нашел удовлетворительное решение. Мне нужно определить имя 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>

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

0 голосов
/ 22 мая 2009

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

...