Вопрос по html, jquery, javascript – Добавить контент в новое открытое окно

40

Я не знаю, как решить эту проблему, я пытаюсь прочитать много постов, но никто не ответил на них.

Мне нужно открыть новое окно с уже закодированной страницей (внутри того же домена) и добавить некоторый контент.

Проблема в том, что если я используюOpenWindow.write() страница еще не загружена, или она переопределяет все, и появляется только код, добавленный посредством записи.

var OpenWindow = window.open('mypage.html','_blank','width=335,height=330,resizable=1');
OpenWindow.document.write(output);

output это код, который мне нужно добавить.

Мне нужно, чтобы он работал хотя бы на Firefox, IE и GC.

Заранее спасибо. Это не проблема, если мне нужно использовать JQuery.

Я также пытался: OpenWindow.addEventListener (& quot; onload & quot ;, function () {OpenWindow.content.body.innerHTML = & quot; & lt; div & gt; hello world & lt; / div & gt; & quot ;;}, true); Mario Corchero
Когда вы вызываете функцию в дочернем окне, вы не можете ничего передать в аргументы функции. Вы должны просто вызвать childWin.function_name (). Если вы вызываете childWin.function_name (output), это не сработает. Для передачи данных от родителя к ребенку, см.stackoverflow.com/questions/2678133/… Ray Cheng

Ваш Ответ

5   ответов
3

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.docume,nt.body).append('<p>hi</p>');
});
Error: User Rate Limit Exceeded
Я отредактировал свой ответ, чтобы обернуть код в блок $ (document) .ready. Попробуй это.
Error: User Rate Limit Exceeded Mario Corchero
26

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>
Насколько это безопасно? Вы не передаете данные через URL, но может ли быть где-то перехват?
это дает неопределенную функцию init () в OpenWindow. Гугл Хром
Как передать переменную / elemnts jquery на дочернюю страницу от родителя? @ Ray-чэн
50

о браузера по умолчанию):

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)));

Update

Google Chrome (60.0.3112.90) block this code:

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;
Error: User Rate Limit ExceededdocumentError: User Rate Limit Exceededwindow.openError: User Rate Limit Exceededstackoverflow.com/questions/4602964/…
2

ST или 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;  
               }
}); 
7

Write a function say init() inside mypage.html that do the html thing ( append or what ever) instead of OpenWindow.document.write(output); call OpenWindow.init() when the dom is ready

Так что родительское окно будет иметь

    OpenWindow.onload = function(){
       OpenWindow.init('test');
    }

и у ребенка

    function init(txt){
        $('#test').text(txt);
    }
Error: User Rate Limit Exceeded Mario Corchero
Error: User Rate Limit Exceeded Mario Corchero
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы