来自js响应的动态iframe内容

时间:2017-02-10 08:06:16

标签: javascript html iframe

我有一个页面,我正在动态创建一个空的iframe。然后我需要通过检索一些js-script响应数据来填充iframe内容。当我调用js URL时,一切正常:

(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

1 个答案:

答案 0 :(得分: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);

编辑:您还将一个名为js的不存在的var传入doc.open()。write(js);我将其更改为.write(html);

编辑2:对于跨域,您可能会在该变量上获得“权限被拒绝”。