Thursday, November 11, 2010

How to run local application from browser

Here is a sample code, which demonstrate local application running from Mozilla Firefox under both Windows and Linux operation systems.

<html>
<head>
<script language="javascript">
function run(strPath)
{
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
    var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile );
    file.initWithPath(strPath);
    process.init(file);
    process.run(false, [""], 1);
}
</script>
</head>
<body>
<a href="javascript: void(0);" onclick="run('C:\\Windows\\calc.exe')">Click me!</a>
</body>
</html>

Below is a same functionality for Internet Explorer (windows only):

<html>
<head>
<script language="javascript">
function run(strPath)
{
    var shell = new ActiveXObject("WScript.shell");
    shell.run(strPath, 1);
}
</script>
</head>
<body>
<a href="javascript: void(0);" onclick="run('C:\\Windows\\calc.exe')">Click me!</a>
</body>
</html>

2 comments:

oneironavt said...

Дима, как страшно жить. А если туда засунуть что-нибудь типа 'erase c:\*'?

Ещё совместимость с браузерами поражает. Под каждый свой код. В Опере не работает кстати.
Я теперь понимаю почему верстальщики так любят материть IE и прочую свору браузеров)

Dmitry I Yastrebkov said...

На самом деле маломальская защита в браузерах есть. IE и Firefox, например, блокируют такие скрипты, пока пользователь не разрешит их исполнить. Но если настроить браузер исполнять такие коды сразу, тогда уже не спастись.

Кстати в начале функции запуска внешней программы для Firefox как раз включается привилегия для такого запуска.

А верстальщикам, мне кажется, сейчас проще жить, чем лет 10 назад. Если Firefox и Chrome подвинут IE, тогда станет еще проще.