Итак, в чистом 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>
Если это было сообщение обратно к себе, не должна ли быть в истории браузера версия перед отправкой (та, в которой я отправил форму, которая уже имела iframe)? Ничто не добавляется в историю браузера, и это заставляет меня думать, что это не так. – rampion
Я просто проверил это, вставив 'alert()' в тег скрипта. Предупреждение появляется только один раз (когда я загружаю страницу), а не после того, как я отправлю форму, что делает меня достаточно уверенным, что нет обратной передачи. – rampion