2009-04-24 4 views
2

У меня возникли проблемы с выяснением того, как я могу получить доступ к содержимому в iframe в Air. Вот пример кода jquery, с которым я тестировал.Доступ к содержимому iframe в Adobe Air

 

$(document).ready(function(){ 
    $("#frame").ready(function(){ 
     air.trace($("#frame").contents().find("body").html()); 
     air.trace(window.frames["frame"].innerHTML); 
     air.trace(document.getElementById("frame").innerHTML); 
    }); 
}); 
 

The iframe я использую есть.

<iframe src="http://google.com" id="frame" width="100%" sandboxRoot="http://google.com/" documentRoot="/" name="frame" height="600"></iframe> 

Выход из приведенного выше кода

 

null 
undefined 

 

Как вы можете видеть содержимое всегда либо нуль, неопределенная или пустая строка. Я пропустил что-то, что мешает мне получить доступ к содержимому iframe? Любые предложения будут ценны.

+0

Похоже, что iframe был удален, когда я разместил его.Это мой первый пост, поэтому я не совсем уверен, как я могу опубликовать это. – tomfmason

ответ

3

Решение было здесь http://help.adobe.com/en_US/AIR/1.1/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7f08.html

Вот пример того, как я получил это работает.

<iframe src="http://google.com/local/iframe.html" id="frame" width="100%" sandboxRoot="http://google.com/local/" documentRoot="app:/" name="frame" height="600"></iframe> 

Все, что просили от sandboxRoot (например. http://google.com/local) будет использоваться из корневого документа и будет рассматриваться как если бы она из того же домена (google.com).

В iframe.html Я могу получить доступ к iframe для google так же, как если бы он был из того же домена.

Я знал, что должен быть способ сделать это :)

+0

У меня такая же проблема, и у меня есть проблемы с пониманием вашего решения. Не могли бы вы объяснить немного больше? Особенно почему src = "http://google.com/local/iframe.html", когда первоначально это было http://google.com ?? –

+0

Царапина, что. Я решил проблему. Вы - спасатель. –

1

Adobe AIR - это всего лишь браузер (WebKit actually) и, следовательно, следуют правилам браузеров. Правило, которое регулирует вашу проблему здесь, называется политикой «одного и того же происхождения».

Если это не тот же домен, браузер не позволит вам получать доступ к данным или контенту с этого сайта, поэтому вы получите этот результат. Используйте API AJAX на основе Json, если вы хотите получить данные из другого домена.

Пример кто-то с этой проблемой:

+0

То же самое из политики происхождения – Rob

+0

Это немного округляет: добавлено. – cgp

+0

Я знаком с той же политикой происхождения, но я не думал, что это будет применяться в воздухе. Я не вижу много практических применений для локального iframe. Это на самом деле удручает, так как это помешает мне добавить функции, зависящие от возможности доступа к dom iframe. – tomfmason

2

Как и многие другие, я изо всех сил, чтобы понять это.

Решение дается сверху tomfmason, но даже тогда он взял меня возрастов, чтобы на самом деле понять, что происходит.

Чтобы помочь кому-либо еще, кто еще может использовать AIR html + js для создания веб-браузера или переноса данных с удаленной веб-страницы, я создал очень простой проект AIR 3.2 (1,7 МБ .zip-файл) которые можно найти по адресу:

http://adobe-air-js.blogspot.com/2011/12/air-reading-dom-of-remote-web-page.html

AIR действительно очень скользкий на самом деле, когда один получает мимо начальных сложностей. Я нахожу, что этот заказ более надежный/годный, чем титан.

Удачи вам! ~ Chris

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