PDA

Просмотр полной версии : Как получить доступ к DOM броузера?


Milagro
19.06.2009, 17:08
Нужно из флешки прочитать например document.URL, т.е. URL html-файла в который внедрен флеш-ролик.

Поиск курил. Проблема в том, что внешнего JavaScript кода на странице нет.

Пробовал так:
import flash.external.ExternalInterface;
var from_js = ExternalInterface.call("return(document.URL)");
возвращается null

random13
19.06.2009, 17:33
а неужели создав функцию на странице и вызвав ее через кол нельзя вернуть урл?

Milagro
19.06.2009, 18:01
Я не могу ничего создать на странице, страница "чужая". Ну например как в случае flash-баннера, который вставлен в произвольные, "чужие" страницы.

etc
19.06.2009, 18:54
ExternalInterface.call('return document.location.href');

Только если allowScriptAccess указан как always.

dimarik
19.06.2009, 19:25
Только если allowScriptAccess указан как always.

Или указан как "sameDomain", либо не указан вовсе (по умолчанию = "sameDomain"), а флешка грузится с того же домена, откуда было загружено грузящее флешку приложение (страница). :wacko:

Milagro
19.06.2009, 19:34
Попробовал - возвращает null

import flash.external.ExternalInterface;
_root.varout.text = ExternalInterface.call("return document.location.href");

BlooDHounD
19.06.2009, 20:47
ExternalInterface.call('function() { try { return document.location.href; } catch ( e ) {} }()');

dimarik
22.06.2009, 11:49
Если политикой безопасности не разрешен доступ к хостер-приложению, то при попытке к нему обратиться случится эксепшен. Лучше обернуть сам запрос в try-catch. Ну это так, к слову.

try {
ExternalInterface.call('function() { try { return document.location.href; } catch ( e ) {} }()');
} catch (error:Error) {
trace('Ooops!');
}

BlooDHounD
22.06.2009, 12:16
dimarik, лучше поставить проверку на ExternalInterface.available :)

у меня в коде ошибка кстати. последние скобки в строке не нужны.

dimarik
22.06.2009, 12:31
ExternalInterface.available тоже вызовет эксепшен.

BlooDHounD
22.06.2009, 14:28
жесть :) адобовцы не перестают удивлять своим идиотизмом.

dimarik
22.06.2009, 14:44
так-с. поправочка.

Тестировалось при allowScriptAccess="never"

if (ExternalInterface.available) {
ExternalInterface.call("function(){return document;}");
}

ExternalInterface.available дает правду и последующий call приводит к security error.

Так что любой вызов ExternalInterface.call лучше обернуть в try-catch потому как ExternalInterface.available не всегда прав.