0

我已经为跨域请求创建了带有 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 给了我“无传输”错误。但是当我在受害者页面上做脚本元素时,一切都很好,例如:

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 总是使用主页来创建请求,我该如何解决?

4

1 回答 1

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

所以无论你在哪里分配变量 $,“文档”都不会改变。

jquery 这样做是为了解决性能问题(也许是其他的?

您需要编辑 jquery 源,提取“工厂”功能...

( 函数工厂(){} )() ==提取==> 函数工厂(){}

并用 iframe 的窗口调用它

工厂(iframe.contentWindow);

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

于 2014-04-05T17:07:52.293 回答