2012-01-22 7 views
4

javascriptを使用するリンクを有効にするためにzombie.jsを取得しようとしています。私はそれをテストしていページがある:zombie.jsでjavascriptのリンクを有効にする方法

<html> 
    <body> 
    <div id="test123"> 
    START_TEXT 
    </div> 
    <a href="javascript:go()">GO</a><br/> 
    <script type="text/javascript"> 
    go = function() { 
    var el = document.getElementById("test123"); 
    el.innerHTML = "CHANGED"; 
    } 
    </script> 
    </body> 
    </html> 

私が使用しているスクリプトは次のとおりです。

var zombie = require("zombie"); 
var browser = new zombie.Browser; 

browser.visit("http://localhost:8000/testpage.html", 
     function() { 
       browser.clickLink("GO", function(e, browser, status) { 
         var temp = browser.text("div#test123"); 
         console.log("content:", temp); 
        }); 
}); 

私は、エラーメッセージが出ます:私は

を使用する場合

node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
      ^
Error: Cannot load resource: javascript:go() 
    at History._resource (/home/julian/temp/node_modules/zombie/lib/zombie/history.coffee:75:15) 
    at History._pageChanged (/home/julian/temp/node_modules/zombie/lib/zombie/history.coffee:60:21) 
    at History._assign (/home/julian/temp/node_modules/zombie/lib/zombie/history.coffee:213:19) 
    at Object.location (/home/julian/temp/node_modules/zombie/lib/zombie/history.coffee:51:24) 
    at Object.click (/home/julian/temp/node_modules/zombie/lib/zombie/jsdom_patches.coffee:31:59) 
    at Object.dispatchEvent (/home/julian/temp/node_modules/zombie/node_modules/jsdom/lib/jsdom/level2/html.js:480:47) 
    at /home/julian/temp/node_modules/zombie/lib/zombie/eventloop.coffee:130:16 
    at EventLoop.perform (/home/julian/temp/node_modules/zombie/lib/zombie/eventloop.coffee:121:7) 
    at EventLoop.dispatch (/home/julian/temp/node_modules/zombie/lib/zombie/eventloop.coffee:129:19) 
    at Browser.dispatchEvent (/home/julian/temp/node_modules/zombie/lib/zombie/browser.coffee:220:30) 

browser.evaluate("go()")

それは動作します。 私は何が欠けていますか?

答えて

0

よく、それは理解していないようですjavascript:code href。おそらく、あなたは、URLを取得することができますjavascriptを削除: - セクションとそれを評価する?

免責事項:私はまだzombie.jsを使用していません。

-1

zombie.js APIは、browser.clickLink()の最初のパラメータとしてCSSセレクタまたはリンクテキストを取ります。だからあなたのコードはうまくいくはずです。

しかしZombie.jsは「javascript:」形式でリンク処理されません

browser.clickLink('#thelink', function(e, browser, status) { 
    var temp = browser.text("div#test123"); 
    console.log("content:", temp); 
}); 
+0

私はそれを試みましたが、結果は同じです。リンクが見つかりました。問題はjavascript:go()の部分にあります。他のリンクが動作します。 – Julian

+1

ああそうです。 tuhoojabottiの答えが正しいように見えますが、zombie.jsのようなリンクはサポートされていません。この問題のために既に開かれている[issue](https://github.com/assaf/zombie/issues/170)があります。 – fent

6

ページを管理している場合は、リンクにIDを追加してみてください、とCSSセレクタを使用してのhref上(のをこの執筆時点)。

ソースコードに3行追加して修正しました。 /node_modules/zombie/lib/zombie/history.coffeeを探し、3行は(すなわち、.coffeeにあなたはインデントを尊重しなければならないことに注意してください2つのスペースを使用します。)FIXとコメントを追加:

# Location uses this to move to a new URL. 
_assign: (url)-> 
    url = @_resolve(url) 

    # FIX: support for javascript: protocol href 
    if url.indexOf("javascript:")==0 
    @_browser.evaluate(url.substr("javascript:".length)) 
    return 

    was = @_stack[@_index]?.url # before we destroy stack 
    @_stack = @_stack[[email protected]_index] 
    @_stack[[email protected]_index] = new Entry(this, url) 
    @_pageChanged was 

私はおそらくべきgithub.comのzombie.jsをフォークしてこれをプルリクエストに入れてください。それまではこのスニペットを使用するか、私の前にそのプルリクエストを行うことを歓迎します。