Что такое MM_callJS? - PullRequest
       12

Что такое MM_callJS?

1 голос
/ 10 марта 2012

При проверке кода для использования страшной функции eval я нашел это:

function MM_callJS(jsStr) {
    return eval(jsStr)
}
...
<body onLoad="MM_callJS">

, который мне кажется (с моим ограниченным опытом работы с Javascript) совершенно бессмысленным, потому что, как jsStr может когда-либо установить его значение?

Похоже, что поиск в Интернете не показывает ничего иного, как предположение, что MM_callJS может быть соглашением.

Что меня здесь беспокоит, так это возможность злоумышленника использовать его для выполнения вредоносного кода, если есть какой-то «магический» способ установки параметра jsStr.

Ответы [ 2 ]

1 голос
/ 10 мая 2012

Вы ошибаетесь в предположении, что параметру jsStr никогда не будет присвоено значение. Обработчики событий всегда вызываются с параметром event, описывающим только что произошедшее событие. Он содержит поля типа bubbles, srcElement и методы типа preventDefault().

Итак, этот объект передается в eval для оценки.

Согласно MDN (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/eval), если eval передается не строковый аргумент, этот аргумент возвращается без изменений. Таким образом, ваша функция возвращает объект события в jsStr без изменений.

Теперь некоторые обработчики событий поддерживают возвращаемое значение (например, если вы возвращаете false из обработчика щелчка элемента <a>, ссылка не отслеживается). Однако согласно

http://docstore.mik.ua/orelly/webprog/jscript/ch19_01.htm

Обработчик

onload не изменяет свое поведение в зависимости от возвращаемого значения. Следовательно, этот код в конечном итоге ничего не делает.

Конечно, все это подозревали, но я хотел рассказать вам, можно ли определить jsStr.

0 голосов
/ 04 декабря 2015

Я считаю, что MM_callJS - это фрагмент кода поведения Dreamweaver.

...