Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Не получить данные из фрейма (https://javascript.ru/forum/dom-window/21139-ne-poluchit-dannye-iz-frejjma.html)

softrix 30.08.2011 13:26

Не получить данные из фрейма
 
Подскажите почему может не работать конструкция
$("iframe").contents().find("body").html();

Во всех броузерах все ок, а в Опере не пашет. В чем может быть проблема?

devote 30.08.2011 15:17

удивительно что вообще работает где-то ибо метод .contents() возвращает не прототип jQuery а чистый элемент

devote 30.08.2011 15:22

тебе надо делать так:
$($("iframe").contents()).find("body").html();

softrix 30.08.2011 16:28

Везде где я видел примеры именно в таком формате
$("iframe").contents().find("body").html();

Даже в NetBeans в справке по contents() именно такой формат примера.

Но в любом случае, и такой вариант
$($("iframe").contents()).find("body").html();

тоже не работает.
Опера пишет:
Uncaught exception: ReferenceError: Security error: attempted to read protected variable

devote 30.08.2011 16:33

вот вырезка кода jQuery-1.6.2 из этого участка:
contents: function( elem ) {
        return jQuery.nodeName( elem, "iframe" ) ?
            elem.contentDocument || elem.contentWindow.document :
            jQuery.makeArray( elem.childNodes );
    }

devote 30.08.2011 16:35

Цитата:

Сообщение от softrix
тоже не работает.
Опера пишет:
Uncaught exception: ReferenceError: Security error: attempted to read protected variable

Дык iframe данные хоть со своего домена получает? То-есть с того же где основной сайт? А то по ошибке такое впечатление что нет.

softrix 30.08.2011 16:46

Цитата:

Сообщение от devote (Сообщение 123537)
Дык iframe данные хоть со своего домена получает? То-есть с того же где основной сайт? А то по ошибке такое впечатление что нет.

Да, кончено все на одном сайте. Правда на сабдомене.

softrix 30.08.2011 16:49

Даже на такой код ошибка:
var c = $("iframe").contents();
for(prop in c){
    document.write(c[prop]+'<br />')
}

Вот полностью ошибка

Uncaught exception: ReferenceError: Security error: attempted to read protected variable: valueOf

Error thrown at line 591, column 4 in <anonymous function>(data) in http://site.net/Scripts/fs.js:
document.write(c[prop]+'<br />')
called from line 123, column 1033 in b() in http://ajax.googleapis.com/ajax/libs...jquery.min.js:
e.success&&
called via Function.prototype.call() from line 129, column 367 in <anonymous function: x.onreadystatechange>(q) in http://ajax.googleapis.com/ajax/libs...jquery.min.js:
j||b();

devote 30.08.2011 16:52

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

softrix 30.08.2011 18:46

Ok, буду копать сам. Скорее всего глюки в Опере. Спасибо за помощь

B@rmaley.e><e 30.08.2011 19:35

Цитата:

Сообщение от devote
метод .contents() возвращает не прототип jQuery а чистый элемент

Документация и пример в ней говорят обратное.

softrix, Вы уверены, что текущий домен и домен во фрейме полностью совпадают, вплоть до www.
Цитата:

Сообщение от softrix
Правда на сабдомене.

Так домены точно совпадают? С домена на сабдомен (как и обратно) нельзя.

devote 30.08.2011 19:45

Цитата:

Сообщение от B@rmaley.e><e
Дока говорит обратное.

Да я видел что дока говорит иное, но код я показал вырезку... В чем был сам удивлен... Но факт того что в коде у них иначе не так как в доке, остается фактом... Либо я не туда посмотрел, в чем очень сомневаюсь

B@rmaley.e><e 30.08.2011 19:56

Цитата:

Сообщение от devote
Да я видел что дока говорит иное, но код я показал вырезку

Показали, но сами до конца его не проанализировали. А код-то там
*!*
jQuery.each({
*/!*
	// другие методы
	// …
	contents: function( elem ) {
		return jQuery.nodeName( elem, "iframe" ) ?
			elem.contentDocument || elem.contentWindow.document :
			jQuery.makeArray( elem.childNodes );
	}
*!*
},  function( name, fn ) {
	jQuery.fn[ name ] = function( until, selector ) {
		var ret = jQuery.map( this, fn, until ),
			// The variable 'args' was introduced in
			// [url]https://github.com/jquery/jquery/commit/52a0238[/url]
			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
			// [url]http://code.google.com/p/v8/issues/detail?id=1050[/url]
			args = slice.call(arguments);

		if ( !runtil.test( name ) ) {
			selector = until;
		}

		if ( selector && typeof selector === "string" ) {
			ret = jQuery.filter( selector, ret );
		}

		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;

		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
			ret = ret.reverse();
		}

		return this.pushStack( ret, name, args.join(",") );
	};
});
*/!*

devote 30.08.2011 20:01

Цитата:

Сообщение от B@rmaley.e><e
Показали, но сами до конца его не проанализировали. А код-то там

Да сорри, что-то я последнее время совсем тупить стал... Быстро посмотрел и почему то показалось выше не each а extend... Спать мне надо больше


Часовой пояс GMT +3, время: 14:59.