2013-05-24 5 views
2

Не удивляйтесь, если то, что я делаю, совершенно неверно, или если решение очевидно.Вызов функции vbscript из кнопки html

<script type="text/vbscript"> 
    Function AddPrinter() 
     Set objNetwork = CreateObject("WScript.Network") 
     objNetwork.AddWindowsPrinterConnection "\\a2031slhsfile1\2031CAT-T113-HP4014dn" 
     objNetwork.SetDefaultPrinter "\\a2031slhsfile1\2031CAT-T113-HP4014dn" 
     MsgBox "The printer was added and set as the default printer." 
    End Function 
</script> 

Я добавил выше VBScript к HTML-документу в головной части и одна из кнопок имеет следующее свойство:

onclick="AddPrinter()" 

Я не нашел много об этом при поиске на Google для час. То, что я нашел, не сработало. Как он знает, вызываете ли вы функцию из javascript или vbscript или что-то в любом случае?

Я получаю эту ошибку:

SCRIPT429: ActiveX component can't create object: 'WScript.Network' 
+0

Вы не можете сделать это с веб-страницы. – SLaks

ответ

5

параметров безопасности Internet Explorer предотвратить создание элемента управления ActiveX. Вам нужно разрешить «инициализировать и скриптировать элементы управления ActiveX, не помеченные как безопасные для сценариев».

+1

Вот что я сделал, чтобы исправить это, но я забыл вернуться к этому вопросу, когда я закончил. Лучше поздно, чем никогда. –

2

Хм, WScript.Network прекрасно работает в IE, по крайней мере, до версии 8. Как о OnClick, его значение по умолчанию отведение (будь то запуск JavaScript или VBScript) зависят от содержания сценария на странице. Если страница содержит скрипты на обоих языках (JavaScript и VBScript), то JavaScript по умолчанию, т.е .:

onClick="MyFunc()" 'is equal to: 
onClick="javascript:MyFunc()" 

В Seach случае вам нужно использовать явный модификатор языка для запуска VBScript.

onClick="vbscript:MyFunc()" 

Но если страница содержит только VBScript то, что не нужно.

<html> 
    <head> 
    <title>Example</title> 
    <script type="text/vbscript"> 
     Sub Hello() 
      Set objNetwork = CreateObject("WScript.Network") 
      If IsObject(objNetwork) Then 
       MsgBox "Its working" 
       MsgBox "Computer Name = " & objNetwork.ComputerName 
      Else 
       MsgBox "Not working" 
      End If 
     End Sub 
     Sub btnTest2_OnClick() 
      Hello() 
     End Sub 
    </script> 
    </head> 
    <body> 
    <button onClick="Hello()">Test 1</button> 
    <input type="button" value="Test 2" id="btnTest2"> 
    <input type="button" value="Test 3" onClick="Hello()"> 
    </body> 
</html> 

P.S. И если вы не измените настройки безопасности IE, как предлагает Ansgar Wiechers, вам нужно будет подтвердить (при первом нажатии).

enter image description here

+0

Работает также в IE9. И в зависимости от уровня безопасности и/или конфигурации ручной зоны не будет приглашения. –

+0

@AnsgarWiechers - Приятно знать, спасибо за комментарий. –

+0

Я добавил vbscript: перед функцией и добавил все те тесты, но по-прежнему получает ту же ошибку. Это определенно не проходит через CreateObject («WScript.Network») –

0

Вы можете выбрать для обхода настроек безопасности в Internet Explorer полностью сохранив файл в качестве ОМТ, а не как HTML. HTA - это гипертекстовые приложения, которые записываются как htmls и используют Internet Explorer в качестве графического интерфейса, но не ограничены теми же проблемами безопасности, что и HTML. единственное изменение, которое вам нужно сделать, это изменить расширение файла с * .html на * .hta.

Смежные вопросы