2013-03-22 186 views
5

我正在使用zombie.js在测试期间从本地快速服务器加载页面。不幸的是,有一个脚本元素可以调用Google Analytics。如果可能的话,我想阻止这个外部脚本(优雅地),而不阻止其他(本地)脚本的加载。防止zombie.js仅加载外部资源

我知道{ runScripts : false }可拨打电话browser.visit()。但是,它拒绝加载页面上的所有脚本,而不是加载其他主机上的脚本。这可能吗?

回答

7

您应该使用resources对象。

如果您不希望请求实际通过,您可以设置某些请求以提供特定响应。你会做以下,使谷歌分析返回一个空文件:

browser.resources.mock('http://google.com/url/to/analytics.js',{}); 

请注意,您必须提供要嘲笑确切的网址,也没有办法嘲笑的部分URL,如域名称。

+0

在我看来,'resources.mock'方法不再存在于僵尸4.x中。请参阅https://github.com/assaf/zombie/blob/master/src/resources.js – Corkscreewe 2015-06-03 17:14:44

8

由于zombie 3.1browser.resources.mock方法不见了。另一种方法是使用nock库:

var nock = require('nock') 

nock('http://www.google-analytics.com') 
    .get('/analytics.js') 
    .times(Math.Infinity) 
    .reply(200, '{}') 

var Browser = require('zombie') 
var browser = new Browser() 
0

也许这样的事情会为你工作?它遍历所有资源并“放弃”那些应该被忽略的资源。

const Fetch = require('zombie/lib/fetch'); 

const ignoredResources = [ 
    'google-analytics.com' 
]; 

browser.pipeline.addHandler((browser, request) => { 
    let doAbort = false; 

    ignoredResources.forEach(domain => { 
    if (request.url.includes(domain)) { 
     doAbort = true; 
    } 
    }); 

    if (doAbort) { 
    return new Fetch.Response('', { status: 200 }); 
    } 
});