<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Opensocial-BR GTUG &#187; Opensocial com flash</title>
	<atom:link href="http://www.opensocial-br.org/category/opensocial-com-flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.opensocial-br.org</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 27 Jun 2011 14:27:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Chamadas em Callback flash por javascript e chamadas javascript no flash e Opensocial</title>
		<link>http://www.opensocial-br.org/chamadas-em-callback-flash-por-javascript-e-chamadas-javascript-no-flash-e-opensocial/</link>
		<comments>http://www.opensocial-br.org/chamadas-em-callback-flash-por-javascript-e-chamadas-javascript-no-flash-e-opensocial/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 22:56:03 +0000</pubDate>
		<dc:creator>Robson Dantas</dc:creator>
				<category><![CDATA[Opensocial com flash]]></category>
		<category><![CDATA[actionscript javascript]]></category>
		<category><![CDATA[javascript flash]]></category>
		<category><![CDATA[opensocial javascript flash]]></category>

		<guid isPermaLink="false">http://www.opensocial-br.org/?p=38</guid>
		<description><![CDATA[Tem sido uma pergunta um pouco comum na lista de desenvolvimento de Opensocial, o processo de integração entre flash e javascript e javascript e flash. Sim, é totalmente possível realizar a integração - com flash player &#62;= 8:

Chamar uma função do flash via javascript;
Chamar uma função javascript via flash;

Escrevi flash acima, mas entenda por actionscript. [...]]]></description>
			<content:encoded><![CDATA[<p>Tem sido uma pergunta um pouco comum na lista de desenvolvimento de Opensocial, o processo de integração entre flash e javascript e javascript e flash. Sim, é totalmente possível realizar a integração - com flash player &gt;= 8:</p>
<ul>
<li>Chamar uma função do flash via javascript;</li>
<li>Chamar uma função javascript via flash;</li>
</ul>
<p>Escrevi flash acima, mas entenda por actionscript. Precisará escrever código em actionscript para poder fazer a comunicação, através de uma interface chamada "ExternalInterface".</p>
<p>Além do correto funcionamento do que você desenvolver em AS3, precisará seguir uma receita de bolo para poder fazer o processo funcionar. Ex:</p>
<ul>
<li>Configurar o crossdomain.xml, ou colocar explicitamente o código de AllowDomain no flash, para não dar problema de security exception;</li>
<li>Criar um wrapper javascript para chamar a função do flash, que é diferenciado para Internet Explorer e Firefox;</li>
<li>Usar as funções de embedFlash nativas do desenvolvimento em Opensocial (para Orkut), pois farão o tratamento automático, sem necessidade de uso de <a title="Swfobject" href="http://code.google.com/p/swfobject/" target="_blank">swfobject </a>e <a title="proxy de url opensocial" href="http://wiki.opensocial.org/index.php?title=Gadgets.io_(v0.9)#gadgets.io.getProxyUrl" target="_blank">proxy de url</a>;</li>
</ul>
<p>Exemplo de um código AS3, bem simples, que faz chamada em uma função javascript chamada 'teste' e adiciona um callback 'continuacaoTeste', que chama uma função 'printResult' do AS3.</p>
<pre>package
{
	import flash.display.Sprite;
	import flash.external.ExternalInterface;
	import flash.system.Security;
	import flash.text.TextField;

	public class Teste extends Sprite
	{
		public var txt: TextField;

		public function Teste (): void
		{
			Security.allowDomain ('*');
			if (ExternalInterface.available)
			{
				ExternalInterface.call('<strong>teste</strong>');
				ExternalInterface.addCallback('<strong>continuacaoTeste</strong>', this.printResult);
			}
		}

		private function printResult (str: String): void
		{
			this.txt.text = str;
		}
	}
}</pre>
<p>Note na diretriz Security.allowDomain('*') . Não é o ideal, mas para o caso desse teste bem simples, exclui a necessidade do crossdomain.xml .</p>
<p>Feito o código acima, gere o swf e vamos partir para o código Opensocial necessário para fazer a comunicação flash x javascript.</p>
<pre>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
 &lt;Module&gt;
   &lt;ModulePrefs title="OpensocialBR - javascript + flash"
			  description="Exemplo de flash com javascript - opensocial-br"
			  author="Robson Dantas"
			  author_email="robson (at) dxs.com.br"
			  author_location="Sao Paulo, Brazil"
			  screenshot="http://www.opensocial-br.org/logo.jpg"
			  thumbnail="http://www.opensocial-br.org/logo.jpg"&gt;
	 &lt;Require feature="opensocial-0.8" /&gt;
	 &lt;Require feature="views" /&gt;
     &lt;Require feature="flash" /&gt;

   &lt;/ModulePrefs&gt;

	&lt;Content type="html" view="canvas,profile"&gt;
	   &lt;![CDATA[
		&lt;html&gt;
			&lt;head&gt;
				&lt;script type="text/javascript"&gt;
					function init()
					{
                        adicionaFlash();
					}

                    function adicionaFlash()
                    {
                        // carrega o flash, no container 'splayer', com 200x200
                        var params={allowscriptaccess:"always", wmode: "window", width: 200, height: 200}
                        gadgets.flash.embedFlash("http://www.opensocial-br.org/exemplo/teste_opensocial.swf", document.getElementById("splayer"), 9, params);
                    }

                    // wrapper para chamar funcao flash
                    function thisMovie(movieName) {
                        if (navigator.appName.indexOf("Microsoft") != -1) {
                            return window[movieName];
                        } else {
                            return document.getElementById(movieName);
                        }
                    }

                    // chamada do flash
                    function teste()
                    {
                        alert("flash chamou a funcao teste");
                    }

                    // javascript que chama o callback do flash
                    function chamaFuncaoFlash()
                    {
                        // notar o 'swfContainer0', que pode ser inspecionado pelo firebug é colocado automaticamente como
                        // swfContainer0 . Pode-se criar um javascript que pegue o próximo child do container 'splayer'

                        thisMovie("swfContainer0").continuacaoTeste("string de teste");
                    }

                    // funcao de carga padrão do opensocial
					gadgets.util.registerOnLoadHandler(init);
				&lt;/script&gt;
			&lt;/head&gt;
			&lt;body&gt;
                &lt;div id="splayer"&gt;flash carrega aqui&lt;/div&gt;
				&lt;input type="button" value="callback flash" onclick="chamaFuncaoFlash();"&gt;
			&lt;/body&gt;
		&lt;/html&gt;
		]]&gt;
	&lt;/Content&gt;
&lt;/Module&gt;</pre>
<p>Notas importantes:</p>
<ul>
<li>É necessário usar gadgets.flash.embedFlash para garantir que não exista problemas de segurança;</li>
<li>Veja o wrapper "thisMovie". É uma função auxiliar para trazer o id do flash, que não funciona no IE da mesma forma que o firefox;</li>
</ul>
<p>Caso queira, pode baixar o código fonte:</p>
<ul>
<li><a title="Exemplo opensocial, flash e javascript" href="http://www.opensocial-org/exemplo/exemplo-flash.xml" target="_blank">XML Opensocial</a>;</li>
<li><a title="Exemplo AS3 e javascript" href="http://www.opensocial-br.org/exemplo/flash_opensocial.zip" target="_blank">Código AS3 de exemplo</a>;</li>
</ul>
<p>Referências:</p>
<ol>
<li><a href="http://blog.guya.net/2006/06/19/understanding-flash%E2%80%99s-externalinterface/" target="_blank">Flash and Everything Else - Guya.net</a> ;</li>
<li><a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html" target="_blank">Referência de ExternalInterface - site da Adobe</a>;</li>
</ol>
<p>Espero que tenha ajudado, e caso tenha alguma dúvida, faça contato no formulário de comentários abaixo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.opensocial-br.org/chamadas-em-callback-flash-por-javascript-e-chamadas-javascript-no-flash-e-opensocial/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

