Frequentemente, terei um arquivo JavaScript que desejo usar, que requer que determinadas variáveis sejam definidas na minha página da web.
Portanto, o código é algo como isto:
<script type="text/javascript" src="file.js"></script>
<script type="text/javascript">
var obj1 = "somevalue";
</script>
Mas o que eu quero fazer é:
<script type="text/javascript"
src="file.js?obj1=somevalue&obj2=someothervalue"></script>
Eu tentei métodos diferentes e o melhor ainda é analisar a string de consulta assim:
var scriptSrc = document.getElementById("myscript").src.toLowerCase();
E, em seguida, pesquise meus valores.
Gostaria de saber se existe outra maneira de fazer isso sem criar uma função para analisar minha string.
Vocês todos conhecem outros métodos?
javascript
parameter-passing
RaduM
fonte
fonte
Respostas:
Eu recomendo não usar variáveis globais, se possível. Use um espaço para nome e OOP para passar seus argumentos para um objeto.
Este código pertence a file.js:
E no seu arquivo html:
fonte
var MYLIBRARY = MYLIBRARY || (function(){}());
? Por que deveMYLIBRARY
ser definido como um valor booleano?Você pode passar parâmetros com atributos arbitrários. Isso funciona em todos os navegadores recentes.
Dentro do somefile.js, você pode obter valores de variáveis passados da seguinte maneira:
........
... etc ...
fonte
document.currentScript
, consulte caniuse.com/#feat=document-currentscript para compatibilidade (ou use um polyfill)$(..)
sintaxe é jquery, não esqueça de incluí-la.Outra ideia que me ocorreu foi atribuir um
id
ao<script>
elemento e passar os argumentos comodata-*
atributos. A<script>
tag resultante ficaria assim:O script pode então usar o id para localizar-se programaticamente e analisar os argumentos. Dada a
<script>
tag anterior , o nome pode ser recuperado assim:Temos
name
=helper
fonte
helper.js
script faça um loop por todas asscript
tags da página, procurando pela que contémscr="helper.js"
e depois extraiadata-name
.var this_js_script = $('script[src*=somefile]');
(copiado de acima )Confira este URL. Está funcionando perfeitamente para a exigência.
http://feather.elektrum.org/book/src.html
Muito obrigado ao autor. Para uma referência rápida, colei a lógica principal abaixo:
fonte
Você usa variáveis globais :-D.
Como isso:
O código JavaScript em 'file.js' pode acessar
obj1
eobj2
sem problemas.EDIT Apenas deseja adicionar que se 'file.js' quiser verificar se
obj1
eobj2
mesmo foi declarado, você pode usar a seguinte função.Espero que isto ajude.
fonte
return typeof window[$Name] !== 'undefined';
. Observe que você passaria para essa função uma string contendo o nome da variável. É provavelmente mais fácil simplesmente verificar se a variável existe no código de chamada (isso não pode ser implementado como uma função) viaif (typeof var !== 'undefined')
.var
.Aqui está uma prova de conceito muito apressada.
Tenho certeza de que há pelo menos 2 lugares onde pode haver melhorias, e também tenho certeza de que isso não sobreviveria por muito tempo na natureza. Qualquer comentário para torná-lo mais apresentável ou utilizável é bem-vindo.
A chave é definir um ID para o seu elemento de script. O único problema é que isso significa que você pode chamar o script apenas uma vez, pois ele procura esse ID para puxar a cadeia de consulta. Isso pode ser corrigido se, em vez disso, o script percorrer todos os elementos de consulta para ver se algum deles aponta para ele e, se houver, usar a última instância desse elemento de script. Enfim, continue com o código:
Script sendo chamado:
Script chamado através da seguinte página:
fonte
pode ser muito simples
por exemplo
Você pode converter a string de consulta em json como abaixo
e então pode usar como
fonte
Isso pode ser feito facilmente se você estiver usando alguma estrutura Javascript como o jQuery. Igual a,
Agora você pode usar esses parâmetros dividindo como seus parâmetros variáveis.
O mesmo processo pode ser feito sem nenhuma estrutura, mas será necessário mais algumas linhas de código.
fonte
Bem, você pode ter o arquivo javascript sendo construído por qualquer uma das linguagens de script, injetando suas variáveis no arquivo a cada solicitação. Você teria que dizer ao seu servidor da web para não distribuir os arquivos js estaticamente (usar mod_rewrite seria suficiente).
Esteja ciente de que você perde qualquer cache desses arquivos js, pois eles são alterados constantemente.
Tchau.
fonte
<script>
bloco, você pode usar algo parecido com oMyModule.Initialize( '<%: Model.SomeProperty%>', '<%: Model.SomeOtherProperty%>', ...);
que é renderizado no servidor. Cuidado:<%:
escapa o valor, enquanto<%=
envia o valor sem escape.MyModule
seria um espaço para nome (ou seja, uma variável dentro do arquivo .js que é chamada automaticamente, o que expõe a funçãoInitialize
). Votei na sua resposta, porque é uma contribuição útil.Boa pergunta e respostas criativas, mas minha sugestão é tornar seus métodos parametrizados e isso deve resolver todos os seus problemas sem truques.
se você tem função:
você pode mudar isso para:
Eu acho que essa é a abordagem mais natural, você não precisa criar documentação extra sobre 'parâmetros de arquivo' e recebe o mesmo. Isso é especialmente útil se você permitir que outros desenvolvedores usem seu arquivo js.
fonte
Não, você realmente não pode fazer isso adicionando variáveis à parte da string de consulta da URL do arquivo JS. Se estiver escrevendo a parte do código para analisar a string que o incomoda, talvez outra maneira seria codificar json suas variáveis e colocá-las em algo como o atributo rel da tag? Não sei como isso é válido em termos de validação HTML, se é algo com que você está muito preocupado. Então você só precisa encontrar o atributo rel do script e, em seguida, json_decode.
por exemplo
fonte
Não é um html válido (acho que não), mas parece funcionar se você criar um atributo personalizado para a tag de script em sua página da web :
<script id="myScript" myCustomAttribute="some value" ....>
Em seguida, acesse o atributo personalizado no javascript:
var myVar = document.getElementById( "myScript" ).getAttribute( "myCustomAttribute" );
Não tenho certeza se isso é melhor ou pior do que analisar a cadeia de origem do script.
fonte
Se você precisar de uma maneira que seja aprovada na verificação do CSP (que proíbe a entrada não segura), use o método nonce para adicionar um valor exclusivo ao script e à diretiva CSP ou escreva seus valores no html e leia-os novamente.
Método Nonce para express.js:
ou escreva valores no método html. neste caso, usando Jquery:
fonte