2013-07-08 1 views
2

Если у меня есть Javascript ЦСИ какПередача JavaScript аргументы с помощью сценария атрибут Src

<script src="http://domain.com/js/script.js"> 

Может я добавить еще несколько значений к концу этого

<script src="http://domain.com/js/script.js?state=1"> 

И получить состояние внутри, что JavaScript ??

Эта идея исходила из ситуации, когда мне нужно получить разрешение клиента и сохранить его в сеансе, но я не могу принять его по php, поэтому мне нужно его получить с помощью javascript, но я не хочу показывать сценарий от исходного кода

Я думаю, что это возможно, потому что я видел, что многие источники имеют ссылку как это!

+1

Почему вы должны передать разрешение сценарию? Не может ли сценарий вычислить его при необходимости? – JJJ

+0

Я не понимаю, что вы имеете в виду. Что бы «государство» делало? –

+1

Каждый раз, когда я добавлял параметр строки запроса в источник скрипта, он был отметкой времени или версией, чтобы предотвратить кеширование. –

ответ

3

Не можете сделать что-нибудь подобное?

<script> 
    var state = 1; 
</script> 
<script src="http://domain.com/js/script.js"> 
+0

А, спасибо! Как я могу это забыть !!! –

+0

Я согласен с дандависом. Это не отвечает на вопрос. Конечно, это решает их проблему в их случае. Но вопрос, который они задавали, был чем-то другим. – RoboticRenaissance

1

Передача переменной перед вызовом JS будет работать. Но если вы не хотите загрязнять Global с помощью vars, вы можете попробовать PHP-подход:

Сделайте файл PHP, объявляющий в заголовке, это будет javascript, сделайте все, что захотите, с переменной, захватывающей ее с помощью $_GET. значения и выводит отформатированный файл JS с

<script src="http://domain.com/js/script.php?state=1" />

<?php 
// We'll be outputting a JS 
header('Content-type: text/javascript'); 

$phpState = $_GET['state']; 
?> 

function someCommonJS(){ 
    var myState = "<?=$phpState;?>"; /*printing php var into js*/ 
} 

<?php 
/* some more php*/ 
?> 

/*some more js*/ 

Таким образом, файл идет, как вы хотите, без пользователей будучи в состоянии увидеть все ваши if else, что было бы видно, если сделано с помощью JS.

10

только в случае, если кто-то хочет, чтобы фактический ответ на актуальный вопрос, вместо того, чтобы прибегать к глобальным переменным и двумя тегами сценария:

<script src="http://domain.com/js/script.js?state=1"></script> 

внутри script.js:

(function(){ 
    var myTags=document.getElementsByTagName("script"); 
    var src= myTag[myTag.length-1].src; 
    var state=unescape(src).split("state=")[1].split("&")[0]; 
    alert(state); 
}()); 

, если вам нужно передайте много материала, используйте общий синтаксический анализатор queryString, чтобы превратить скрипт в строку запроса в объект.

+0

Я знаю, что это два года, но он отлично работает с моим 1-линейным виджемом, который я строил. Для этого требуется идентификатор пользователя, который я могу передать без загромождения глобального пространства имен. +1 – jrounsav

+2

@ Cluckles: знайте, что новые браузеры поддерживают свойство document.currentScript', что делает «кишки» функции сводятся к 'state = unescape (document.currentScript.src) .split (« state = ») [1] .split ("&") [0] ' – dandavis

Смежные вопросы