我有一个页面,我正在动态创建一个空的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
答案 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:对于跨域,您可能会在该变量上获得“权限被拒绝”。