首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用zombie.js激活javascript链接

如何使用zombie.js激活javascript链接
EN

Stack Overflow用户
提问于 2012-01-23 02:04:14
回答 3查看 5.4K关注 0票数 4

我正在尝试让zombie.js激活一个使用javascript的链接。我正在测试的页面是:

代码语言: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>

我使用的脚本是:

代码语言:javascript
复制
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);
                  });
});

我得到了错误消息:

代码语言:javascript
复制
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()")

它起作用了。我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-23 02:11:27

嗯,它似乎不理解javascript:code的hrefs。也许你可以得到url,删除javascript:-部分并评估它?

免责声明:我自己还没有用过zombie.js。

票数 0
EN

Stack Overflow用户

发布于 2012-01-27 01:09:57

Zombie.js不能处理href上带有"javascript:“的链接(在撰写本文时)。

我在源代码中添加了3行代码,修复了这个问题。查找/node_modules/zombie/lib/zombie/history.coffee并添加带有FIX注释的3行(注意,在.coffee中,您必须遵守缩进,即。使用2个空格):

代码语言:javascript
复制
# 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[0..@_index]
  @_stack[++@_index] = new Entry(this, url)
  @_pageChanged was

我可能应该在github.com上派生zombie.js,并将其放入一个Pull请求中,但在此之前,欢迎您使用此代码片段,或者在我之前提出该pull请求。

票数 6
EN

Stack Overflow用户

发布于 2012-01-23 03:36:58

zombie.js API表示它接受CSS选择器或链接文本作为browser.clickLink()的第一个参数。所以你的代码应该可以工作了。

但是,如果您可以控制页面,请尝试向链接添加id,并使用CSS选择器

代码语言:javascript
复制
browser.clickLink('#thelink', function(e, browser, status) {
  var temp = browser.text("div#test123");
  console.log("content:", temp);
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8963274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档