IncludeJS有timeInterval问题

时间:2014-08-03 16:05:47

标签: javascript phantomjs

源代码。

var page = require('webpage').create();

page.onConsoleMessage = function(msg) {
    console.log(msg);
};

page.open("http://info.finance.yahoo.co.jp/fx/", function(status) {
    if ( status === "success" ) {
        interval = setInterval(function(){
            console.log("executed");
            page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
                var result = page.evaluate(function() {
                    console.log($("#USDJPY_bid").text());
                });
            });
        }, 3000);
    }
});

有效。

>phantomjs --web-security=false sample.js
executed
102.6
executed
102.6
102.6
executed
102.6
102.6
102.6

我想通过jQuery重新加载数据。首先它连接到网站,并重复执行jQuery并保持连接。

每次调用时,console.log的数量都会增加。它只发生在Includejs内部。我只需要调用一次。

1 个答案:

答案 0 :(得分:0)

如果你仔细观察,你会发现页面中已经包含了jQuery,所以你不需要自己包含它。这就足够了:

page.open("http://info.finance.yahoo.co.jp/fx/", function(status) {
    if ( status === "success" ) {
        interval = setInterval(function(){
            var result = page.evaluate(function() {
                console.log($("#USDJPY_bid").text());
            });
        }, 3000);
    }
});

如果你仍想要包含你的jQuery版本,那么你应该只一次

page.open("http://info.finance.yahoo.co.jp/fx/", function(status) {
    if ( status === "success" ) {
        var loaded = false;
        page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
            loaded = true;
        });
        setInterval(function(){
            if (!loaded) return;
            page.evaluate(function() {
                console.log($("#USDJPY_bid").text());
            });
        }, 3000);
    }
});

仅在没有--web-security=false标志的情况下才能在我的机器上运行。奇怪的是,我必须将includeJssetInterval分开。