2017-02-10 5 views
0

У меня есть страница, где я динамически создаю пустой iframe. Затем мне нужно заполнить содержимое iframe, извлекая некоторые данные ответа js-script. Все отлично работает, когда я звоню JS URL:Динамическое содержимое iframe из ответа js

(function(d) { 
    var iframe = d.body.appendChild(d.createElement('iframe')), 
     doc = iframe.contentWindow.document, 
    options = { 
     objid: 152, 
     key: 316541321 
    }, 
    src = "host/widget.js", 
    uri = encodeURIComponent(JSON.stringify(options)); 

    iframe.id = "iframewidget"; 
    iframe.width = 200; 
    iframe.height = 300; 
    var html = '<body onload="var d=document;' + 
     'd.getElementsByTagName(\'head\')[0].appendChild(d.createElement(\'script\')).src=\'' + src + '\'">'; 
    doc.open().write(html); 
    doc.close(); 
})(document); 

Но мне нужно, чтобы запустить widget.js с некоторым динамическим параметром. Есть ли способ передать значение переменной uri скрипту? Я использую чистый JavaScript, а не jQuery

+0

Просто добавьте строку запроса в файл js? Или какой параметр вы имеете в виду? – Connum

+1

Вы уверены, что iFrame именно то, что вам нужно создать? Обычно iFrames используются для загрузки внешнего кода на вашу страницу, например, на внешнюю страницу HTML, PHP и т. Д. Вы динамически создаете iFrame, а затем вам нужно передать переменные в атрибуте «src». Тогда загружаемая страница отвечает за обработку этих переменных. Если вы планируете хотя бы сделать «фрейм» исключительно с вашего javascript, при этом вся логика «внешняя», вам лучше начать создавать простой контейнер HTML (DIV). – Strahdvonzar

+0

@Connum, как это сделать? Мне нужно, чтобы widget.js использовал значение «uri», указанное в моем коде – mogilka

ответ

1

Вот краткая модификация вашего кода, чтобы показать, как это возможно.

Ваша переменная doc является элементом документа iFrame. Установка переменной на нее позволит вам получить доступ к ней из кода, запущенного в iFrame.

https://jsfiddle.net/78gf5e8q/

(function(d) { 
    var iframe = d.body.appendChild(d.createElement('iframe')), 
     doc = iframe.contentWindow.document, 
    options = { 
     objid: 152, 
     key: 316541321 
    }, 
    //src = "host/widget.js", 
    uri = encodeURIComponent(JSON.stringify(options)); 
     doc.someVar = "Hello World!"; 
    iframe.id = "iframewidget"; 
    iframe.width = 200; 
    iframe.height = 300; 
    var html = '<body onload="var d=document;' + 
     'd.getElementsByTagName(\'head\')[0].appendChild(d.createElement(\'script\')).innerHTML=\'alert(document.someVar)\'">'; 
     doc.open().write(html); 
    doc.close(); 
})(document); 

Edit: вы также переходящие в несуществующей вар называется JS в doc.open() писать (JS);. Я изменил его на .write (html);

Редактировать 2: Для перекрестного домена вы, вероятно, получите «Разрешение отказа» на этом var.

+0

благодарим вас за исправление. Я попробую вашу версию – mogilka

+0

рад, что она работает, спасибо за участие! – executor

Смежные вопросы