Итак, в чистом 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>