\n -> символ новой строки не работает для вставки новой строки.
str="Hello!!";
document.write(str);
document.write("\n");
document.write(str);
Но если мы используем ниже код, то он отлично работает и дает новую строку.
document.write(str);
document.write("<br>");
document.write(str);
Примечание :: Я пробовал код Visual Studio.
blockquote>
Я бы рекомендовал по возможности не использовать глобальные переменные. Используйте пространство имен и ООП, чтобы передать свои аргументы объекту.
Этот код принадлежит file.js:
var MYLIBRARY = MYLIBRARY || (function(){
var _args = {}; // private
return {
init : function(Args) {
_args = Args;
// some other initialising
},
helloWorld : function() {
alert('Hello World! -' + _args[0]);
}
};
}());
И вашему html-файлу:
<script type="text/javascript" src="file.js"></script>
<script type="text/javascript">
MYLIBRARY.init(["somevalue", 1, "controlId"]);
MYLIBRARY.helloWorld();
</script>
Вы используете глобальные переменные :-D.
Подобно этому:
<script type="text/javascript">
var obj1 = "somevalue";
var obj2 = "someothervalue";
</script>
<script type="text/javascript" src="file.js"></script">
JavaScript-код в 'file.js' может без проблем получить доступ к obj1
и obj2
.
EDIT Просто добавим, что если 'file.js' хочет проверить, были ли вообще объявлены obj1
и obj2
, то можно воспользоваться следующей функцией.
function IsDefined($Name) {
return (window[$Name] != undefined);
}
Надеюсь, это поможет.
Это легко сделать, если вы используете какой-нибудь Javascript-фреймворк, например jQuery. Например,
var x = $('script:first').attr('src'); //Fetch the source in the first script tag
var params = x.split('?')[1]; //Get the params
Теперь вы можете использовать эти параметры, разделив их в качестве параметров переменной.
Этот же процесс может быть выполнен без использования фреймворка, но займет еще несколько строк кода.
Ну, файл javascript можно было бы собрать на любом из языков сценариев, вводя свои переменные в файл при каждом запросе. Вы должны будете сказать своему веб-серверу, чтобы он не выдавал js-файлы статически (достаточно использовать mod_rewrite).
Помните, однако, что вы теряете кэширование этих js-файлов, так как они постоянно изменяются.
Пока.
Нет, на самом деле вы не можете этого сделать, добавив переменные в квистинговую часть URL JS-файла. Если это написание части кода для разбора беспокоящей Вас строки, возможно, другим способом будет json кодировать Ваши переменные и помещать их во что-то вроде атрибута rel тэга? Я не знаю, насколько это достоверно с точки зрения HTML валидации, если это что-то, что вас очень беспокоит. Тогда вам просто нужно найти атрибут rel скрипта, а затем json_decode это.
eg
<script type='text/javascript' src='file.js' rel='{"myvar":"somevalue","anothervar":"anothervalue"}'></script>
Вот очень поспешное доказательство концепции.
Я уверен, что есть как минимум 2 места, где можно улучшить, и я также уверен, что это не продержится долго в дикой природе. Любые отзывы, которые сделают его более презентабельным или удобным, приветствуются.
Ключ устанавливает идентификатор для вашего элемента скрипта. Единственная загвоздка в том, что это означает, что вы можете вызвать скрипт только один раз, поскольку он ищет этот идентификатор для получения строки запроса. Это можно исправить, если вместо этого сценарий перебирает все элементы запроса, чтобы увидеть, указывает ли какой-либо из них на него, и если да, то использует последний экземпляр такого элемента сценария. Во всяком случае, с кодом:
window.onload = function() {
//Notice that both possible parameters are pre-defined.
//Which is probably not required if using proper object notation
//in query string, or if variable-variables are possible in js.
var header;
var text;
//script gets the src attribute based on ID of page's script element:
var requestURL = document.getElementById("myScript").getAttribute("src");
//next use substring() to get querystring part of src
var queryString = requestURL.substring(requestURL.indexOf("?") + 1, requestURL.length);
//Next split the querystring into array
var params = queryString.split("&");
//Next loop through params
for(var i = 0; i < params.length; i++){
var name = params[i].substring(0,params[i].indexOf("="));
var value = params[i].substring(params[i].indexOf("=") + 1, params[i].length);
//Test if value is a number. If not, wrap value with quotes:
if(isNaN(parseInt(value))) {
params[i] = params[i].replace(value, "'" + value + "'");
}
// Finally, use eval to set values of pre-defined variables:
eval(params[i]);
}
//Output to test that it worked:
document.getElementById("docTitle").innerHTML = header;
document.getElementById("docText").innerHTML = text;
};
<script id="myScript" type="text/javascript"
src="test.js?header=Test Page&text=This Works"></script>
<h1 id="docTitle"></h1>
<p id="docText"></p>
Проверьте этот URL. Он отлично работает в соответствии с требованиями.
http://feather.elektrum.org/book/src.html
Большое спасибо автору. Для быстрого ознакомления я вставил основную логику ниже:
var scripts = document.getElementsByTagName('script');
var myScript = scripts[ scripts.length - 1 ];
var queryString = myScript.src.replace(/^[^\?]+\??/,'');
var params = parseQuery( queryString );
function parseQuery ( query ) {
var Params = new Object ();
if ( ! query ) return Params; // return empty object
var Pairs = query.split(/[;&]/);
for ( var i = 0; i < Pairs.length; i++ ) {
var KeyVal = Pairs[i].split('=');
if ( ! KeyVal || KeyVal.length != 2 ) continue;
var key = unescape( KeyVal[0] );
var val = unescape( KeyVal[1] );
val = val.replace(/\+/g, ' ');
Params[key] = val;
}
return Params;
}
Хороший вопрос и творческие ответы, но я предлагаю сделать ваши методы параметризованными, и это должно решить все ваши проблемы без всяких уловок.
если у вас есть функция:
function A()
{
var val = external_value_from_query_string_or_global_param;
}
, вы можете изменить это на:
function B(function_param)
{
var val = function_param;
}
Я думаю, что это наиболее естественный подход, вам не нужно создавать дополнительную документацию о «параметрах файла», и вы получите то же самое. Это особенно полезно, если вы разрешаете другим разработчикам использовать ваш файл js.