2013-03-22 133 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 }); 
    } 
});