简体   繁体   中英

setTimeout() won't execute

I have two examples using setTimeout(). This one works:

<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>

But this doesn't:

<!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>

Just to reiterate: the problem is that setTimeout() won't work on the second code but works on the first one and I would like to know why because I see no difference.

try to add a console.log(drawTable); just before your timeout. if it returns 'function', it'a good, your timeout will be ok. if not return anything, your activeX script should break the code

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM