Решения здесь:
None
в качестве значения по умолчанию (или nonce object
) и включите его, чтобы создать свои значения во время выполнения; или lambda
в качестве параметра по умолчанию и вызовите его в блоке try, чтобы получить значение по умолчанию (это то, что требуется для лямбда-абстракции). Второй вариант хорош, потому что пользователи функции могут проходить в вызываемом, который может уже существовать (например, type
)
Вы можете поместить код на эту веб-страницу, которая исследует параметры запроса в URL-адресе, а затем, основываясь на том, что она находит, вызывает любую функцию javascript, которую вы хотите.
В вашем конкретном примере упрощенная версия будет выглядеть так:
// code that runs when page is loaded:
if (window.location.search == "?XYZ") {
XYZ();
}
, или если вы хотите, чтобы он запускал любую функцию, присутствующую там, вы можете извлечь это из строки и запустить любое имя.
// code that runs when page is loaded:
if (window.location.search.length > 1) {
var f = window.location.search.substr(1); // strip off leading ?
try {
eval(f + "()"); // be careful here, this allows injection of javascript into your page
} catch(e) {/* handler errors here */}
}
Разрешение произвольного javascript, которое будет запущено на вашей странице, может иметь или не иметь нежелательных последствий для безопасности. Было бы лучше (если возможно) поддерживать только определенный набор ранее существовавших функций, которые вы ищете и знаете, безопасны, а не выполняют произвольный javascript, как второй пример.
Я так считаю:
if(location.href == ""){
xyz();
else{
}
Вы можете вызвать глобально объявленную функцию, используя объект window:
function bar(str) {
alert("hello" + str);
}
// assuming location is "http://example.com?bar"
var fn = window.location.search.replace("?", "");
window[fn](" Dovhakiin"); // 'hello Dovhakiin'
В строке URL вы всегда можете поместить javascript:XYZ();
Попробуйте, после загрузки этого URL: http://jsfiddle.net/maniator/mmAxY/show/
location.search.replace(/^\?(.+)$/, function(all, funcName) { eval(funcName + '()') })
– RReverser 18 July 2011 в 18:13