Вы можете использовать javascript для отключения кнопки «Назад» (обычно путем отправки пользователя на страницу, которая пересылается на другую страницу, так что щелчок назад снова отправляет вам вперед). Постоянный пользователь все еще может вернуться на 2 этапа назад и перешагнуть через цикл.
Эта страница находится в кеше браузера. Вы можете попросить браузер не кэшировать что-либо, но это может испортить производительность, а иногда и резко, поэтому я бы не рекомендовал ее.
Используйте применять метод функции:-
function mainfunc (func){
window[func].apply(null, Array.prototype.slice.call(arguments, 1));
}
Править: Мне приходит в голову, что это было бы намного более полезно с небольшой тонкой настройкой:-
function mainfunc (func){
this[func].apply(this, Array.prototype.slice.call(arguments, 1));
}
Это будет работать за пределами браузера (this
значения по умолчанию к глобальному пространству). Использование запроса mainfunc также работало бы:-
function target(a) {
alert(a)
}
var o = {
suffix: " World",
target: function(s) { alert(s + this.suffix); }
};
mainfunc("target", "Hello");
mainfunc.call(o, "target", "Hello");
Ваш код только работает на глобальные функции, т.е. членов window
объект. Для использования его с произвольными функциями передайте саму функцию вместо ее имени как строка:
function dispatch(fn, args) {
fn = (typeof fn == "function") ? fn : window[fn]; // Allow fn to be a function object or the name of a global function
return fn.apply(this, args || []); // args is optional, use an empty array by default
}
function f1() {}
function f2() {
var f = function() {};
dispatch(f, [1, 2, 3]);
}
dispatch(f1, ["foobar"]);
dispatch("f1", ["foobar"]);
f2(); // calls inner-function "f" in "f2"
dispatch("f", [1, 2, 3]); // doesn't work since "f" is local in "f2"
Вы могли использовать .apply()
Необходимо указать a this
... Я предполагаю, что Вы могли использовать this
в mainfunc
.
function mainfunc (func)
{
var args = new Array();
for (var i = 1; i < arguments.length; i++)
args.push(arguments[i]);
window[func].apply(this, args);
}
Вот то, в чем Вы нуждаетесь:
function mainfunc (){
window[Array.prototype.shift.call(arguments)].apply(null, arguments);
}
Первый аргумент используется в качестве имени функции, и все остающиеся используются в качестве аргументов вызванной функции...
Мы можем использовать shift
метод, чтобы возвратиться и затем удалить первое значение из массива arguments. Обратите внимание, что мы назвали его от прототипа Массива с тех пор, строго говоря, 'аргументы' не действительный массив и так не наследовался shift
метод как эквидистантная антенная решетка был бы.
Можно также назвать метод сдвига как это:
[].shift.call(arguments);
Не могли Вы просто передать arguments
массив вперед?
function mainfunc (func){
// remove the first argument containing the function name
arguments.shift();
window[func].apply(null, arguments);
}
function calledfunc1(args){
// Do stuff here
}
function calledfunc2(args){
// Do stuff here
}
mainfunc('calledfunc1','hello','bye');
mainfunc('calledfunc2','hello','bye','goodbye');