2015-03-09 6 views
3

Я использую Zombie.js для разрешения URL-адресов с несколькими перенаправлением. По какой-то причине я хочу иметь возможность обнаруживать определенный тип перенаправления, а затем останавливать обработку (не следовать этому перенаправлению).Как вы можете остановить перенаправление с помощью Zombie.js

var browser = new Browser(); 
browser.on('redirect', function(request, response, redirectRequest){ 
    var redirectUrl = response.url; 
    if (redirectUrl === 'http://www.example.com'){ 
    //Do something and stop the processing 
    } 
}); 

browser.visit(urlToLoad).then(function() { 
    //Do something 
}); 

Я пытался добавить обработчик трубопровода и выдаст сообщение об ошибке с next(), но это не сработало, потому что я не мог обнаружить Перенаправление таким образом. Есть ли что-то, что я могу сделать, чтобы остановить браузер для загрузки страницы, если я обнаружил свое перенаправление?

ответ

0

Зависит от того, что вы подразумеваете под «остановкой». Вы можете, конечно, определить перенаправление на конвейере с помощью вспомогательной переменной. В моем случае я должен определить, является ли переадресация форме входа в систему, выполнить вход и затем вернуться к исходной странице. Я нашел способ смешивания трубопровода и слушателя событий:

let redirectedFrom = null; 

Browser.extend(function(browser) { 
    browser.on('redirect', function(request, response) { 
    if (response.status === 302 && response.url === 'login_page')) { 
     redirectedFrom = request.headers.get('referer'); 
    } 
    }); 
}); 

const browser = new Browser(); 

browser.pipeline.addHandler(function(browser, request, response) { 
    if (redirectedFrom !== null) { 
     // do something interesting here 
     redirectedFrom = null; 
    } 
    return response; 
}); 

Теперь, когда я browser.visit() и попадаю на страницу входа в систему, я могу войти и visit(redirectedFrom)