我正在使用zombie.js在測試期間從本地快速服務器加載頁面。不幸的是,有一個腳本元素可以調用Google Analytics。如果可能的話,我想阻止這個外部腳本(優雅地),而不阻止其他(本地)腳本的加載。防止zombie.js僅加載外部資源
我知道{ runScripts : false }
可撥打電話browser.visit()
。但是,它拒絕加載頁面上的所有腳本,而不是加載其他主機上的腳本。這可能嗎?
我正在使用zombie.js在測試期間從本地快速服務器加載頁面。不幸的是,有一個腳本元素可以調用Google Analytics。如果可能的話,我想阻止這個外部腳本(優雅地),而不阻止其他(本地)腳本的加載。防止zombie.js僅加載外部資源
我知道{ runScripts : false }
可撥打電話browser.visit()
。但是,它拒絕加載頁面上的所有腳本,而不是加載其他主機上的腳本。這可能嗎?
您應該使用resources對象。
如果您不希望請求實際通過,您可以設置某些請求以提供特定響應。你會做以下,使谷歌分析返回一個空文件:
browser.resources.mock('http://google.com/url/to/analytics.js',{});
請注意,您必須提供要嘲笑確切的網址,也沒有辦法嘲笑的部分URL,如域名稱。
由於zombie 3.1,browser.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()
也許這樣的事情會爲你工作?它遍歷所有資源並「放棄」那些應該被忽略的資源。
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 });
}
});
在我看來,'resources.mock'方法不再存在於殭屍4.x中。請參閱https://github.com/assaf/zombie/blob/master/src/resources.js – Corkscreewe 2015-06-03 17:14:44