在iframe中加载jQuery并使用它的ajax

时间:2013-03-07 16:10:12

标签: javascript jquery ajax post iframe

我为跨域请求创建了带iframe的hta应用程序,因为我无法启动自己的服务器来代理这些请求。

在主页面上,我插入了“受害者”网站的jQuery脚本和iframe,例如:google.com

<iframe name="iframe" src="http://google.com" application="yes"></iframe>

现在我必须通过iframe执行AJAX POST请求,这里是代码:

var frame = document.frames.iframe;
frame.$ = $
frame.$.ajax({
    type : 'post'
    url : 'http://google.com'
    data : 'blablabla'
});

但是iframe给了我“No Transport”错误。但是,当我在受害者页面上执行脚本元素时,一切正常,例如:

var frame = document.frames.iframe.document;
var el = frame.createEelement('SCRIPT');
el.src = "file://urlToJs.js";
frame.appendChild(el);

通过这个例子一切正常,但我没有工作上网(我们使用本地网站)...并创建另一个js文件加载我也不想要。

请帮助我!

我尝试了什么:

  • 获取脚本元素文本(document.scripts [0] .innerHTML)并创建 iframe中包含文本的脚本[错误]
  • document.frames.iframes。$ = parent。$ [也不工作,没有传输错误]

似乎jQuery ajax总是使用主页来创建请求,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

jquery收集脚本加载所需的一切。

你可以在jquery源文件中看到类似的内容:

(function factory( window ){ // a huge closure around the entire file
    var doc = window.document;

    window.$ = function(){
        // do something with the "doc"
    }
})( window );  // <- init with current window

所以无论你在哪里分配变量$,&#34;文件&#34;不会改变。

jquery为性能问题做了这个(可能还有别的吗?

你需要编辑jquery源,提取&#34;工厂&#34;功能......

  

(function factory(){})()== extract ==&gt; function factory(){}

并使用iframe的窗口调用

  

厂(iframe.contentWindow);

然后您可以根据需要使用iframe.contentWindow。$。