Добавить контент в новое открытое окно
Я не знаю, как решить эту проблему, я пытаюсь прочитать много постов, но никто не отвечает на это.
Мне нужно открыть новое окно с уже закодированной страницей (внутри того же домена) и добавить некоторый контент.
Проблема в том, что если я использую OpenWindow.write()
страница еще не загружена, или она переопределяет все, и появляется только код, добавленный посредством записи.
var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1');
OpenWindow.document.write(output);
output
это код, который мне нужно добавить.
Мне нужно, чтобы он работал хотя бы на Firefox, IE и GC.
Заранее спасибо. Это не проблема, если мне нужно использовать JQuery.
6 ответов
В parent
.html:
<script type="text/javascript">
$(document).ready(function () {
var output = "data";
var OpenWindow = window.open("child.html", "mywin", '');
OpenWindow.dataFromParent = output; // dataFromParent is a variable in child.html
OpenWindow.init();
});
</script>
в child.html
:
<script type="text/javascript">
var dataFromParent;
function init() {
document.write(dataFromParent);
}
</script>
Если вы хотите открыть новую вкладку / окно (зависит от настроек вашего браузера по умолчанию):
output = 'Hello, World!';
window.open().document.write(output);
Когда вывод Object
и вы хотите получить JSON, например (также может генерировать любой тип документа, даже изображение, закодированное в Base64)
output = ({a:1,b:'2'});
window.open('data:application/json;' + (window.btoa?'base64,'+btoa(JSON.stringify(output)):JSON.stringify(output)));
Обновить
Google Chrome (60.0.3112.90) блокирует этот код:
Not allowed to navigate top frame to data URL: data:application/json;base64,eyJhIjoxLCJiIjoiMiJ9
Когда вы хотите добавить некоторые данные на существующую страницу
output = '<h1>Hello, World!</h1>';
window.open('output.html').document.body.innerHTML += output;
output = 'Hello, World!';
window.open('about:blank').document.body.innerText += output;
Вот что вы можете попробовать
- Напишите функцию my () init() внутри mypage.html, которая выполняет html (добавление или что-либо еще)
- вместо
OpenWindow.document.write(output);
вызовOpenWindow.init()
когда дом готов
Так что родительское окно будет иметь
OpenWindow.onload = function(){
OpenWindow.init('test');
}
и у ребенка
function init(txt){
$('#test').text(txt);
}
Когда вы звоните document.write
после загрузки страницы все содержимое будет удалено и заменено указанным вами параметром. Вместо этого используйте методы DOM для добавления контента, например:
var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1');
var text = document.createTextNode('hi');
OpenWindow.document.body.appendChild(text);
Если вы хотите использовать jQuery, вы получите несколько лучших API для работы. Например:
var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1');
$(OpenWindow.document.body).append('<p>hi</p>');
Если вам нужен код для запуска после того, как DOM нового окна будет готов, попробуйте:
var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1');
$(OpenWindow.document.body).ready(function() {
$(OpenWindow.document.body).append('<p>hi</p>');
});
Если вы хотите открыть страницу или окно с отправкой данных методом POST или GET, вы можете использовать такой код:
$.ajax({
type: "get", // or post method, your choice
url: yourFileForInclude.php, // any url in same origin
data: data, // data if you need send some data to page
success: function(msg){
console.log(msg); // for checking
window.open('about:blank').document.body.innerHTML = msg;
}
});
это еще проще!
Просто поместите код ниже между
<head> </head>
вашего кода, и все ваши ссылки откроются в новом окне:
<base target="_blank">