2015-06-22 3 views
-2

У меня есть два примера, используя setTimeout(). это работает:SetTimeout() не будет выполнять

<html> 
<head> 
<script type='text/javascript' src='https://www.google.com/jsapi'></script> 
<script type="text/javascript"> 
    google.load('visualization','1',{packages:['table']}); 
    function start() { 
      setTimeout(ShowClipboardContent, 2000); 
    } 

    function ShowClipboardContent() { 
     var data = new google.visualization.DataTable(window.clipboardData.getData('Text')); 
    var table = new google.visualization.Table(document.getElementById('div')); 
    table.draw(data,{showRowNumber: true}); 
    } 
    </script> 
</head> 
<body> 
    <button onclick='start();'>Show text data in clipboard</button> 
    <div id='div'></div> 
</body> 
</html> 

Но это вовсе не так:

<!DOCTYPE html> 
<html> 
<head> 
    <script type='text/javascript' src='https://www.google.com/jsapi'></script> 
    <script type='text/javascript'> 
     google.load('visualization','1',{packages:['table']}); 
    </script> 
    <script type='text/javascript'> 
     //runs powershell and copies output onto clipboard 
     function powershell(t) { 
      //object that will execute powershell 
      var run = new ActiveXObject("Shell.Application"); 
      //breaks the list of servers into array 
      var servers = t.textarea.value.split('\n'); 
      //script that powershell will run 
      var script = 'some powershell command'; 
      //path to powershell.exe 
      var program = 'C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe'; 
      //putting it all together 
      run.ShellExecute(program,script,'','open','1'); 
      setTimeout(drawTable, 10000); 
     } 

     //draws data table using data from clipboard 
     function drawTable() { 
      var data = new google.visualization.DataTable(window.clipboardData.getData('Text')); 
      var table = new google.visualization.Table(document.getElementById('table')); 
      table.draw(data, {showRowNumber: true}); 
     } 
    </script> 
</head> 
<body> 
    <div id='form'> 
     <form> 
      Enter name(s):<br /> 
      <textarea id='textarea' style='width:20%; height:500px;'></textarea><br /> 
      <button onclick='powershell(this.form)'>Query</button> 
     </form> 
    </div> 
    <div id='table'></div> 
</body> 
</html> 

Просто повторюсь: проблема заключается в том, что setTimeout() воны я работаю над вторым кодом, но работает над первым, и я хотел бы знать, почему, потому что я не вижу разницы.

+2

Вы уверены, что проблема в 'setTimeout', а может быть, и в целом в ActiveX? –

+6

Очевидно, что код * before * на вызов 'setTimeout' в' powershell' не работает, возможно, потому, что ни один современный браузер больше не поддерживает вызовы '' ActiveXObject''. Посмотрите в своей веб-консоли на наличие ошибок, выполните код в отладчике, встроенном в ваш браузер, и т. Д. –

+0

Откройте консоль (например, cmd + opt + J на ​​Mac и Chrome) и скопируйте и вставьте здесь ошибку. –

ответ

0

попытаться добавить console.log(drawTable); как раз перед вашим перерывом. если он возвращает «функцию», это хорошо, ваш тайм-аут будет в порядке. если ничего не возвращать, ваш скрипт activeX должен разорвать код

+0

Console.log() вообще не работает для моего IE11, и я имею в виду, что он не работает, поскольку ничего не отображается. Я пробовал «Hello World», ничего больше на странице. – Angleton

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