2013-03-07 8 views
0

Я создал приложение hta с iframe для запросов crossdomain, потому что я не могу запустить свой собственный сервер, чтобы проксимизировать их.Загрузите jQuery в iframe и используйте ajax из него

На главной странице я вставил JQuery скрипт и IFRAME «жертвы» сайта, например: google.com

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

Теперь я должен сделать запрос AJAX POST через этот IFRAME, вот код:

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 [Error]
  • document.frames.iframes $ = parent. $ [Также не работает, No Transport error]

Кажется, что jQuery ajax всегда использует главную страницу для создания запроса, как я могу это исправить?

+0

Если iframe имеет разный домен, вы ничего не можете ему поделать. –

+0

В hta с атрибутом: application = "yes" можно получить доступ также к crossdomain. Найден ответ, ответ: $ .support.cors = true и в ajax crossDomain: true. – giarmul

ответ

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. $, Как хотите.

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