Pergunta

No meu arquivo HTML Tenho ligado à JS com:

src="myscript.js?config=true"

O meu JS lido diretamente o valor deste var assim?

alert (config);

Isto não funciona, eo erro FireFox Console diz "config não está definido". Como faço para ler o vars passou através do atributo src no arquivo JS? É tão simples assim?

Foi útil?

Solução

<script>
var config=true;
</script>
<script src="myscript.js"></script>

Você não pode passar variáveis ??para JS do jeito que você tentou. SCRIPT tag não cria um objeto Window (que tem uma cadeia de consulta), e não é código do lado do servidor.

Outras dicas

Sim, você pode, mas você precisa saber o nome do arquivo de script exata no script:

var libFileName = 'myscript.js',
    scripts = document.head.getElementsByTagName("script"), 
    i, j, src, parts, basePath, options = {};

for (i = 0; i < scripts.length; i++) {
  src = scripts[i].src;
  if (src.indexOf(libFileName) != -1) {
    parts = src.split('?');
    basePath = parts[0].replace(libFileName, '');
    if (parts[1]) {
      var opt = parts[1].split('&');
      for (j = opt.length-1; j >= 0; --j) {
        var pair = opt[j].split('=');
        options[pair[0]] = pair[1];
      }
    }
    break;
  }
}

Você tem agora uma variável de 'opções' que tem os argumentos passados. Eu não testá-lo, eu mudei um pouco de http://code.google.com/p/canvas-text/source/browse/trunk/canvas.text.js onde trabalha.

Você pode ter visto este feito, mas realmente o arquivo JS está sendo pré-processado do lado do servidor usando PHP ou alguma outra linguagem de primeira. O código do lado do servidor irá imprimir / ecoar o javascript com as variáveis ??set. Eu vi um serviço de anúncios roteirizado fazer isso antes, e isso me fez olhar para ver se ele pode ser feito com js simples ol', mas não pode.

Você precisa usar o Javascript para encontrar o atributo src do script e analisar as variáveis ??após o '?'. Usando a estrutura Prototype.js, parece algo como este:

var js = /myscript\.js(\?.*)?$/; // regex to match .js

var jsfile = $$('head script[src]').findAll(function(s) {
    return s.src.match(js);
}).each(function(s) {
    var path = s.src.replace(js, ''),
    includes = s.src.match(/\?.*([a-z,]*)/);
    config = (includes ? includes[1].split('=');
    alert(config[1]); // should alert "true" ??
});
habilidades

Meu Javascript / RegEx são enferrujado, mas essa é a idéia geral. Rasgado direto do arquivo scriptaculous.js!

Seu script pode, contudo, localizar o seu próprio nó do script e examinar o atributo src e extrato de qualquer informação que você gosta.

  var scripts = document.getElementsByTagName ('script');
  for (var s, i = scripts.length; i && (s = scripts[--i]);) {
    if ((s = s.getAttribute ('src')) && (s = s.match (/^(.*)myscript.js(\?\s*(.+))?\s*/))) {
      alert ("Parameter string : '" + s[3] + "'");    
      break;
    } 
  }

Quer ou não isso deve ser feito, é uma pergunta justa, mas se você quiser fazê-lo, http://feather.elektrum.org/book/src.html realmente mostra como. Assumindo blocos do seu navegador quando o processamento de tags de script (atualmente verdadeiros, mas pode não ser prova de futuro), o script em questão é sempre o último script na página até esse ponto.

Em seguida, usando alguma estrutura e plugin como jQuery e http://plugins.jquery.com/project/ parseQuery isso se torna bastante trivial. Surpreso não há um plugin para isso ainda.

Um pouco relacionado é marcas de script degradantes de John Resig, mas que o código é executado após o script externo, não como parte da inicialização: http://ejohn.org/blog/degrading-script-tags/

Créditos: Passando parâmetros para JavaScript arquivos , Passando parâmetros para arquivos JavaScript

Usando variáveis ??globais não é uma solução tão limpo ou seguro, em vez disso você pode usar os atributos de dados-X, é mais limpo e mais seguro:

<script type="text/javascript" data-parameter_1="value_1" ... src="/js/myfile.js"></script>

De myfile.js você pode acessar os parâmetros de dados, por exemplo, com jQuery:

var parameter1 = $('script[src*="myfile.js"]').data('parameter_1');

Obviamente "myfile.is" e "Parameter_1" tem de corresponder nos 2 fontes;)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top