2012-01-22 3 views
4

javascript를 사용하는 링크를 활성화하려면 zombie.js를 얻으려고합니다. 나는 그것을 테스트하고있는 페이지입니다 : 내가 사용하고zombie.js로 자바 스크립트 링크를 활성화하는 방법

<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 hrefs. 아마 당신은 URL을 얻을 수있는, 자바 스크립트를 제거 : - 섹션 및 평가?

면책 조항 : 아직 zombie.js를 사용하지 않았습니다.

-1

zombie.js APIbrowser.clickLink()의 첫 번째 매개 변수로 CSS 선택자 또는 링크 텍스트를 사용한다고 말합니다. 따라서 코드가 작동해야합니다. 당신이 페이지를 제어 할 경우

그러나, 링크에 ID를 추가하는 시도하고

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

나는 그것을 시도하고, 결과는 동일하다. 링크가 발견되면 문제는 javascript : go() 부분에 있습니다. 다른 링크가 작동합니다. – Julian

+1

오, 알겠습니다. tuhoojabotti의 대답은 옳았습니다. 마치 좀비처럼 보이지 않습니다. js는 이러한 종류의 링크를 지원합니다. 이미이 문제에 대해 [문제] (https://github.com/assaf/zombie/issues/170)가 열렸습니다. – fent

6

Zombie.js과 함께 링크를 처리하지 않는 CSS 셀렉터 사용 :에서 (HREF의 "자바 스크립트" 이 글을 쓰는 시점).

소스 코드에 3 줄을 추가하여 수정했습니다. /node_modules/zombie/lib/zombie/history.coffee을 찾아 FIX와 주석 3 줄을 추가 (. 당신이이 개 공간을 즉, 들여 쓰기를 존중 사용해야합니다 .coffee에 그주의) :

# 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를 포크하고 풀 요청에 넣으십시오. 그러나 그때까지이 스 니펫을 사용하거나 나보다 먼저 풀 요청을 할 수 있습니다.

관련 문제