У меня есть код JavaScript, который разделяет экран, однако, как мне запустить его из приложения Flex? - PullRequest
2 голосов
/ 02 июля 2010

Итак, этот код разбивает экран на два кадра:

Javascript:A14nH=location.href;L3f7="http://www.google.com";R1Gh7="http://www.google.com";if(L3f7&&R1Gh7){Fr4Q='<frameset%20cols=\'*,*\'>\n<frame%20src=\''+L3f7+'\'/>';Fr4Q+='<frame%20src=\''+R1Gh7+'\'/>\n';Fr4Q+='</frameset>';with(document){write(Fr4Q);void(close())}}else{void(null)}

Мне нужно запустить этот код из гибкого приложения, и я делаю следующее:

   var jsFunc:String = "function () { location.href=\"javascript:A14nH=location.href; L3f7=\"http://www.google.com\";R1Gh7=\"http://www.google.com\";if(L3f7&&R1Gh7){Fr4Q=\"<frameset%20cols=\"*,*\">\n<frame%20src=\"\"+L3f7+\"\"/>\";Fr4Q+=\"<frame%20src=\"\"+R1Gh7+\"\"/>\n\";Fr4Q+=\"</frameset>\";with(document){write(Fr4Q);void(close())}}else{void(null)}\"}";
   var divExists:Boolean = ExternalInterface.call(jsFunc);

Может кто-нибудь сказать мне, что не так?

(Кстати, если вы измените var jsFunc:String = "function () { location.href='http://www.google.com' }";, страница перейдет в Google)

Ответы [ 4 ]

3 голосов
/ 03 июля 2010

Убедитесь, что для параметра «allowNetworking» объекта и тегов вставки Flash задано значение true.С этим параметром весь пакет ExternalInterface становится строго ограниченным.

Кроме того, может быть лучше хранить javascript вместе с HTML.Затем из AS3 вы можете вызвать функцию js, используя ExternalInterface.

IN ActionScript: ExternalInterface.call(myJavascriptFunc) вызовет myJavascriptFunc, если она загружена на той же странице, что и приложение Flash.

1 голос
/ 07 июля 2010

Я полагаю, что вы можете вызвать функцию eval и передать ей JavaScript, который хотите выполнить:

var jsFunc:String = "location.href=\"javascript:A14nH=location.href; L3f7=\"http://www.google.com\";R1Gh7=\"http://www.google.com\";if(L3f7&&R1Gh7){Fr4Q=\"<frameset%20cols=\"*,*\">\n<frame%20src=\"\"+L3f7+\"\"/>\";Fr4Q+=\"<frame%20src=\"\"+R1Gh7+\"\"/>\n\";Fr4Q+=\"</frameset>\";with(document){write(Fr4Q);void(close())}}else{void(null)}\"";
var divExists:Boolean = ExternalInterface.call("eval", jsFunc);
0 голосов
/ 09 июля 2010
  1. Вы не можете правильно избежать кавычек.
  2. ExternalInterface.call() ожидает выполнения оператора javascript - вы передаете определение функции, но не вызываете ее. Как уже предлагалось, добавьте () в конец, чтобы вызвать переданную функцию.

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

var js:String = "function () { ";
js += "location.href=\"";
js += "javascript:A14nH=location.href;";
js += "L3f7 = \"http://www.google.com\";";
js += "R1Gh7 = \"http://www.google.com\";";
js += "if(L3f7&&R1Gh7){ ";
js += "Fr4Q= \\\"";
js += "<frameset cols='*,*'><frame src='\\\" + L3f7 + \\\"'/>\\\"; ";
js += "Fr4Q+=\\\"<frame src='\\\" + R1Gh7 + \\\"'/>\\\"; ";
js += "Fr4Q+=\\\"</frameset>\\\"; ";
js += "with(document){write(Fr4Q);void(close())} ";
js += "}else{void(null);} "
js += "\"} ()";
var divExists:Boolean = ExternalInterface.call(js);

Если вы пройдете

"alert('something');"

до ExternalInterface.call, он выполнит его, и вы получите предупреждение. Но если вы пройдете

"function(){alert('something');}"

он просто создает анонимную функцию. Чтобы вызвать функцию, вы должны добавить к ней () как в

"function(){alert('something');}()"

Это то же самое, что создать именованную функцию и вызвать ее следующим образом:

function test(){alert('something');}
test();

Вы можете даже передать параметры таким образом:

"function(text){alert('Got ' + text);('taDaa!!')}"
0 голосов
/ 08 июля 2010

Попробуйте удалить первое назначение location.href и оставьте код, который вы хотите выполнить:

var jsFunc:String = "function () {
    lA14nH = location.href;
    L3f7 = \"http://www.google.com\";
    R1Gh7 = \"http://www.google.com\";

    if (L3f7 && R1Gh7) {
        Fr4Q = '<frameset%20cols=\'*,*\'>\n<frame%20src=\''+L3f7+'\'/>';
        Fr4Q += '<frame%20src=\''+R1Gh7+'\'/>\n';
        Fr4Q += '</frameset>';

        with (document) {
            write(Fr4Q);
            void(close())
        }
    }
    else {
        void(null)
}";
var divExists:Boolean = ExternalInterface.call(jsFunc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...