<?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>4 bits blog &#187; JavaScript</title>
	<atom:link href="http://blog.4bits.es/category/lenguajes/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.4bits.es</link>
	<description>Ahora en 16 colores</description>
	<lastBuildDate>Thu, 05 Aug 2010 13:52:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Los problemas de la clase JSObject</title>
		<link>http://blog.4bits.es/los-problemas-de-la-clase-jsobject/</link>
		<comments>http://blog.4bits.es/los-problemas-de-la-clase-jsobject/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 07:56:46 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=339</guid>
		<description><![CDATA[Como los applets se ejecutan dentro de una página web, se creó un mecanismo (llamado LiveConnect) para comunicarse con el navegador mediante JavaScript, es decir, poder ejecutar JavaScript desde el applet. Este mecanismo ofrece una clase llamada JSObject que permite realizar la comunicación del applet a JavaScript, esta clase se localiza en el paquete netscape.javascript. [...]]]></description>
			<content:encoded><![CDATA[<p>Como los <em>applets</em> se ejecutan dentro de una página web, se creó un mecanismo (llamado <a href="http://en.wikipedia.org/wiki/LiveConnect">LiveConnect</a>) para comunicarse con el navegador mediante JavaScript, es decir, poder ejecutar JavaScript desde el <em>applet</em>.</p>
<p>Este mecanismo ofrece <strong>una clase llamada <code>JSObject</code> que permite realizar la comunicación del <em>applet</em> a JavaScript</strong>, esta clase se localiza en el paquete <code>netscape.javascript</code>.</p>
<p>Lo malo es que esta clase tiene varios problemas y fallos relacionados que no vienen documentados en ningún sitio, sólo en algunas páginas de gente que ha conseguido averiguarlos por su cuenta.</p>
<h3>JSObject no es <em>thread safe</em></h3>
<p>En los ejemplos de <a href="http://java.sun.com/j2se/1.4.2/docs/guide/plugin/developer_guide/java_js.html">la página de Sun dedicada a la clase JSObject</a>, se puede ver un ejemplo de su uso:</p>
<pre class="brush:java">import netscape.javascript.*;
import java.applet.*;
import java.awt.*;

class MyApplet extends Applet {
    public void init() {
        JSObject win = JSObject.getWindow (this);
        JSObject doc = (JSObject) win.getMember ("document");
        JSObject loc = (JSObject) doc.getMember ("location");

        // document.location.href
        String s = (String) loc.getMember ("href");
        win.call ("f", null);   // Call f() in HTML page
    }
}</pre>
<p>Bien, pues <strong>este uso no es correcto, ya que esta clase no es <em>thread safe</em></strong> y en las versiones más recientes del complemento de Java para los navegadores, puede que <strong>la máquina virtual de Java ejecute varios hilos y el uso de esta clase acabe fallando.</strong> Para arreglarlo, sólo se debe hacer lo siguiente:</p>
<pre class="brush:java">synchronized (JSObject.class) {
    win = JSObject.getWindow (applet);
}</pre>
<p>Básicamente, se trata de encapsular el uso de la clase <code>JSObject</code> en un bloque <code>synchronized</code> para evitar fallos por cualquier causa relacionada con hilos.</p>
<h3>JSObject.getMember () no funciona en Firefox sobre Mac OS X</h3>
<p>Otro problema que tiene esta clase es que <strong>en la versión de Firefox para Mac OS X, el método <code>getMember</code> no funciona bien y siempre devuelve <code>null</code></strong>, lo que obliga a usar un trozo de código algo feo. Por ejemplo, para obtener el <em>userAgent</em> del navegador:</p>
<pre class="brush:java">synchronized (JSObject.class) {
    win = JSObject.getWindow (applet);
}
JSObject nav = win.getMember ("navigator");
String userAgent = (String) nav.getMember ("userAgent");</pre>
<p>Utilizando el método <code>getMember</code>.</p>
<pre class="brush:java">synchronized (JSObject.class) {
    win = JSObject.getWindow (applet);
}
String userAgent = (String) win.eval ("navigator.userAgent");</pre>
<p>Un apaño, utilizando el método <code>eval<code>.</p>
<p>Basado en <a href="http://www.nakov.com/blog/index.php?s=jsobject">los posts sobre JSObject de Svetlin Nakov</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/los-problemas-de-la-clase-jsobject/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Applet-fu insertando fácilmente los applets en (X)HTML</title>
		<link>http://blog.4bits.es/applet-fu-insertando-facilmente-los-applets-en-xhtml/</link>
		<comments>http://blog.4bits.es/applet-fu-insertando-facilmente-los-applets-en-xhtml/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 09:09:59 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[(X)HTML]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Recursos]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=302</guid>
		<description><![CDATA[Sigo pesado con los applets, esta vez porque he descubierto un script de JavaScript (applet-fu) que permite insertar los applets en (X)HTML de manera sencilla y evitando tener que preocuparte si será compatible con IE o cumplirá los estándares (X)HTML. A costa de unos cuantos KB del script de JavaScript que hay que incluir en [...]]]></description>
			<content:encoded><![CDATA[<p>Sigo pesado con los <em>applets</em>, esta vez porque he descubierto <strong>un script de JavaScript (<a href="http://products.metamolecular.com/2009/06/08/better-applet-deployment-with-applet-fu">applet-fu</a>) que permite insertar los <em>applets</em> en (X)HTML de manera sencilla y evitando tener que preocuparte <a href="http://blog.4bits.es/applets-en-xhtml-1-1-compatibles-con-ie/">si será compatible con IE o cumplirá los estándares (X)HTML</a>.</strong></p>
<p>A costa de unos cuantos <abbr title="Kilobytes">KB</abbr> del script de JavaScript que hay que incluir en el (X)HTML, se pueden insertar <em>applets</em> con el siguiente código:</p>
<pre class="brush:html">&lt;script type="text/javascript" language="javascript" charset="utf-8"&gt;
    applet_fu.run (
        // Atributos del elemento (X)HTML (como object)
        { 'width'  : '0',
          'height' : '0',
          'name'   : 'applet',
          'id'     : 'applet' },
        // Parámetros del applet
        { 'archive' : 'applets/Applet.jar',
          'code' : 'es.4bits.Applet' },
        // Versión de Java necesaria
        '1.6',
        // Mensaje mostrado si no se encuentra la versión de Java
        '&lt;p&gt;No se ha encontrado la versión de Java necesaria.&lt;/p&gt;'
    );
&lt;/script&gt;</pre>
<p>Además, este código ofrece mediante el mecanismo del navegador utilizado la posibilidad de descargar Java si no se ha encontrado o si tiene una versión distinta a la necesaria.</p>
<p>Sun ofrece algo parecido llamado <a href="http://java.sun.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html#deplToolkit">Java Deployment Kit</a>, pero ocupa más, sólo por realizar más tareas como la posibilidad de usar Java Web Start.</p>
<p>Dejo el enlace a su repositorio en github, para quién lo quiera descargar: <a href="http://github.com/metamolecular/applet-fu/tree/master">código de applet-fu</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/applet-fu-insertando-facilmente-los-applets-en-xhtml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Applets firmados, JavaScript y la pérdida de privilegios</title>
		<link>http://blog.4bits.es/applets-firmados-javascript-y-la-perdida-de-privilegios/</link>
		<comments>http://blog.4bits.es/applets-firmados-javascript-y-la-perdida-de-privilegios/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 08:07:01 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=286</guid>
		<description><![CDATA[De forma predeterminada, los applets de Java tienen sus funciones limitadas por la sandbox para que no puedan acceder a la máquina local. Pero si el applet se firma, y el usuario acepta su ejecución (mediante una ventana de aviso) el applet podrá acceder a la máquina local como si se tratase de una aplicación [...]]]></description>
			<content:encoded><![CDATA[<p>De forma predeterminada, los <em>applets</em> de Java tienen sus funciones limitadas por la <em>sandbox</em> para que no puedan acceder a la máquina local. Pero si el <em>applet</em> se firma, y el usuario acepta su ejecución (mediante una ventana de aviso) el <em>applet</em> podrá acceder a la máquina local como si se tratase de una aplicación Java más.</p>
<p>Hasta aquí todo bien, pero resulta que si desde <strong>la web en la que se carga el <em>applet</em> firmado, se realiza una llamada a cualquier método de éste desde JavaScript, el <em>applet</em> vuelve a perder los privilegios ya que el código JavaScript proviene es inseguro.</strong></p>
<p>Aquí surge la pregunta, ¿cómo se hace para poder ejecutar métodos de un <em>applet</em> firmado desde JavaScript sin que el <em>applet</em> pierda los privilegios? La respuesta es utilizar el siguiente trozo de código:</p>
<pre class="brush:java">AccessController.doPrivileged (
    new PrivilegedAction () {
        public Object run () {
            // Código con privilegios
        }
    });</pre>
<p>Este código permite ejecutar el código que se quiera con privilegios, además el valor devuelto es de tipo <code>Object</code>, por lo que se puede devolver el tipo de objeto que se quiera.</p>
<p>Basado en <a href="http://www.gnegg.ch/2009/04/javascript-and-applet-interaction/">JavaScript and Applet interaction</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/applets-firmados-javascript-y-la-perdida-de-privilegios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
