qual é a diferença entre jhtml: script () e $ doc-&gt; addscript?
<p>desenvolvi recentemente um módulo que exigia a injeção de certos arquivos js e css no <code>&lt;head&gt;</code> de cada página. inicialmente, usei:</p><pre><code>$doc =&amp; jfactory::getdocument(); $doc-&gt;addscript(juri::base(true).'/modules/mod\_x/js/mod\_x.js'); </code></pre><p>no entanto, notei que, quando o cache estava ativado, o site carregava uma versão em cache de <code>/cache</code> e versão não armazenada em cache de <code>/modules/mod\_x/js/</code>, causando erros de js.</p><p>quando mudei isso para:</p><pre><code>jhtml::script(juri::base().'modules/mod\_x/js/mod\_x.js'); </code></pre><p>o script foi carregado apenas uma vez, do cache, resolvendo esses erros.</p><p>i <a href="http://docs.joomla.org/j3.2%3aadding\_javascript\_and\_css\_to\_the\_page">leia os documentos</a> que o método <code>addscript</code> era mais 'baixo nível' do que o <code>jhtml:script</code> método, mas além de dizer que ...</p><blockquote> <p>obviamente, você também precisará codificar manualmente algumas das etapas [que o jhtml: script faz por você] que seriam executadas automaticamente usando o [método jhtml: script] acima [se você usar o addscript].</p> </blockquote><p>... nenhum detalhe adicional é fornecido.</p><p>então qual a diferença? eu assumo <code>jhtml:script</code> eventualmente chama <code>addscript</code> em um objeto de documento em algum momento, mas outras etapas intermediárias são executadas primeiro?</p>
<p><code>jhtml::script</code> possui lógica adicional incluída. consulte <a href="http://api.joomla.org/cms-3/classes/jhtml.html#method\_script">http://api.joomla.org/cms-3/classes/jhtml.html#method\_script</a> para obter a referência da api</p><p>por padrão, ele detectará a configuração de depuração e o navegador usado e carregará o script correspondente. por exemplo, quando a depuração estiver ativada, será carregada uma versão não compactada do arquivo, se presente.</p><p>existem configurações opcionais que permitem substituir o arquivo no nível do modelo e outras coisas.</p><p>michael babker escreveu um bom guia sobre como usar <code>jhtml::script()</code> para permitir substituições: <a href="http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-media">http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable- mídia</a> </p><p>função no repositório para referência: <a href="https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#l659">https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#l659</a> </p><p>página oficial do documento, que agora é atualizada por george: <a href="http://docs.joomla.org/j3.3%3aadding\_javascript\_and\_css\_to\_the\_page">http://docs.joomla.org/j3.3:adding\_javascript\_and\_css\_to\_the\_page</a> </p>
olá gabriel !! tudo bem ??seguinte, isso que vc está querendo fazer não é possível... o php roda antes do javascript e do html e, além disso, em máquinas diferentes (php no servidor e js/html no nav... <p>consegui encontrar o erro. isto é, consegui encontrar onde estava o erro.
o erro estava no arquivo index.html, no ponto onde indico o arquivo javascript principal:</p>
<pre class="prettyprint"><code> &lt;script&gt;
 system.defaultjsextesions &#61; true;
 system.import(&#39;js/app.js&#39;).catch(err &#61;&gt; console.error(err));
 &lt;/script&gt;</code></pre><p>embora o código visível estava identico ao atual, acredito que havia algum caracter especial não imprimível que ocasionava o erro.
ao ponto que refiz o código o erro parou de ocorrer.</p> <p>a função é informar checar qual o tipo de arquivo stylesheet que está sendo retornado pelo servidor. 
a especificação do html5 informa que para link &#34;stylesheet&#34; o tipo &#34;text/css&#34; é o padrão, mesmo sem colocá-lo ele assume que esse é o tipo. </p> Quando o documento é transferido através de HTTP, [as informações do cabeçalho HTTP são as informações crutial](http://www.w3.org/TR/html401/charset.html#h-5.2.2) :



> 
> [...] agentes de usuário conformes devem observar as seguintes prioridades para determinar a codificação de caracteres de um documento (da mais alta prioridade para a menor):
> 
> 
> 1. Um HTTP " `charset`" parâmetro em um " `Content-Type`campo".
> 2. Uma `META`declaração com " `http-equiv`" definido para " `Content-Type`" e um valor definido para " `charset`".
> 3. O `charset`conjunto de atributos em um elemento que designa um recurso externo.
> 
> 
> 


Portanto, verifique se você declarar a codificação de caracteres no [`Content-Type`campo de cabeçalho](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17) e não apenas dentro do documento. olá rafael,quando for construir elementos html na página, uma dica é você inserir diretamente no corpo, para evitar o uso excessivo do echo e também porque não é uma boa prática de programação o jei... <p>olá, vim atualizar a discussão!</p>
<p>baixei o módulo do chart.js e instalei com <code>--save</code> na minha aplicação. eu chamo o código no html:</p>
<pre class="prettyprint"><code>&lt;canvas id&#61;&#34;chart&#34;&gt;&lt;/canvas&gt;&lt;script&gt;require(&#39;./js/graficos&#39;)&lt;/script&gt;</code></pre><p>e coloquei as configurações em um arquivo .js chamado &#34;graficos&#34;, o qual tive que importar no final de cada tag <code>&lt;canvas&gt;</code> . no arquivo .js, eu utilizo o requerimento:</p>
<pre class="prettyprint"><code>var chart &#61; require(&#39;chart.js&#39;);</code></pre> <p>oi tacio, é possível fazer sem lib, no entanto, vai demandar um conhecimento mais profundo da linguagem javascript e esse não é o foco do treinamento de lógica, que tem maior foco na lógica. inclusive, nem era necessário ter as outras tag&#39;s que você colocou (acredito que você já tenha algum experiência com html, por isso quis adiciona-las).</p>
<p>no entanto, para lançar uma luz no problema apresentado por você, vou tentar resolvê-lo usando a menor quantidade de código possível para que você tenha um norte a media que for evoluindo na linguagem javascript. beleza?</p>
<p>vou explicar as particularidades em comentário no código. fui verboso nos nomes das variáveis para deixar claro o que cada parte esta fazendo:</p>
<pre class="prettyprint"><code>function id( el ){

 return document.getelementbyid( el );
}
function getmoney( el ){
 var money &#61; id( el ).value.replace( &#39;,&#39;, &#39;.&#39; );
 return parsefloat( money )*100;
}
function soma() {
 var total &#61; getmoney(&#39;campo1&#39;)&#43;getmoney(&#39;campo2&#39;)&#43;getmoney(&#39;campo3&#39;);
 // usando a nova função!
 id(&#39;campo4&#39;).value &#61; numeroparareal(total/100);
}

// nova função! a que faz a conversão!
function numeroparareal(numero) {

 console.log(numero);
 // todo número possui a função to fixed que o converte para string com o número de casas decimais que indicarmos.
 var totalcomdoisdigitoscomostring &#61; numero.tofixed(2);

 // veja o resultado!
 console.log(totalcomdoisdigitoscomostring);

 // como nosso numero é uma string, toda string possui o método replace que permite trocar parte dele. no caso, estamos trocando ponto por vírgula. o método devolve uma nova string com a modificação.
 var numerocomostringcompontotrocadoporvirgula &#61; totalcomdoisdigitoscomostring.replace(&#39;.&#39;, &#39;,&#39;);

 // veja o resultado
 console.log(numerocomostringcompontotrocadoporvirgula);

 // agora retorno a concatenação de r$ com a string que represnta nosso número
 return &#34;r$ &#34; &#43; numerocomostringcompontotrocadoporvirgula;
}</code></pre>
<p>ou eu posso fazer assim:</p>
<pre class="prettyprint"><code>function numeroparareal(numero) {

 return &#34;r$ &#34; &#43; numero.tofixed(2).replace(&#39;.&#39;, &#39;,&#39;);
}</code></pre>
<p>mas é como eu disse, a media que for evoluindo na linguagem, se ela é a linguagem de sua escolha, novos truques você aprenderá. </p>
<p>sucesso e bom estudo!</p> <p>oi felipe, blz?</p>
<p>o writehead() serve para passar os headers http corretos conforme a regra de negócio.</p>
<p>caso ele não seja passado, o cliente não tem como saber o tipo do retorno.</p>
<p>o que acontece é que o navegador é um cliente bastante inteligente e ele já consegue inferir que o tipo do documento é um html, mesmo sem a informação do content-type, pq o seu conteudo inicia com a tag <code>html</code>.</p>
<p>caso a url seja acessada a partir de um cliente que não faz esse tratamento, ele exibiria um texto plano.</p>
<p>você pode fazer um teste para validar essa resposta alterando o conteudo da resposta para que ele não mais inicie com a tag <code>html</code>.</p>
<p>se vc fizer isso, verá que o navegador passa a exibir o conteudo como texto plano normal.</p>
<p>depois compartilha aqui se a explicação te ajudou. &#61;)</p> **Editar** : ok eu acho que isso funciona (pelo menos funcionou no meu ambiente de teste, ver revisões para tentativa anterior)



```
$.ajaxSetup({
    'beforeSend' : function(xhr) {
        xhr.overrideMimeType('text/html; charset=UTF-8');
    },
});
$('#stuff').load('/yourresource.file'); // your ajax load

```

o que eu tinha era o principal arquivo definido no `UTF-8`eo arquivo de dados definido em `ISO-8859-1`. sem o código acima, eu tenho um monte de lixo para a cadeia teste **åäöé** , como esperado. com o código acima, carregou **åäöé** adequadamente codificada. o melhor vai ser tu seguir essa sequencia:1 - html2 - css3 - javascript...