Я работаю над веб-приложением, где мне нужно получить доступ к элементам iFrame с помощью JavaScript. Для этого iFrame должен отправить в браузер обозреватель «Allow-Control-Allow-Origin: *».Firefox setResponseHeader не работает
К сожалению, этого не происходит, поэтому я использую расширение для изменения заголовков ответов, но по какой-то причине setResponseHeader не работает.
Это становится еще более запутанным, так как я использую setResponseHeader для разделения X-Frame-Options, но когда я настраиваю собственный заголовок, он просто не работает.
Я использую вкладку «Inspect Element» Firefox для наблюдения за запросами, и пока он показывает правильный заголовок запроса, он не отображает заголовок ответа.
Вот как я устанавливаю заголовки запроса и ответа.
var chrome = require("chrome");
chrome.Cc["@mozilla.org/observer-service;1"].getService(chrome.Ci.nsIObserverService).addObserver({
observe : function(subject, topic, data) {
var channel = subject.QueryInterface(chrome.Ci.nsIHttpChannel);
channel.setRequestHeader("x-mysite-extended", "somedata", false);
}
},"http-on-modify-request",false);
chrome.Cc["@mozilla.org/observer-service;1"].getService(chrome.Ci.nsIObserverService).addObserver({
observe : function(subject, topic, data) {
var channel = subject.QueryInterface(chrome.Ci.nsIHttpChannel);
channel.setResponseHeader("x-mysite-extended", "somedata", false);
}
},"http-on-examine-response",false);
Снова заголовок запроса работает в соответствии с вкладкой Сеть. Я попробовал http-on-modify-request, чтобы установить заголовок ответа, но это не сработало.
Вот как я зачищаю заголовок X-Frame-Options, который работает.
let myListener =
{
observe : function (aSubject, aTopic, aData)
{
console.log(aTopic);
if (aTopic == "http-on-examine-response")
{
let channel = aSubject.QueryInterface(Ci.nsIHttpChannel);
try
{ // getResponseHeader will throw if the header isn't set
let hasXFO = channel.getResponseHeader('X-Frame-Options');
if (hasXFO)
{
// Header found, disable it
channel.setResponseHeader('X-Frame-Options', '', false);
}
}
catch (e) {}
}
}
}
var observerService = Cc["@mozilla.org/observer-service;1"]
.getService(Ci.nsIObserverService);
observerService.addObserver(myListener, "http-on-examine-response", false);
Я пытался решить это в течение двух часов, поэтому любая помощь будет оценена. Благодарю.
Я не пытаюсь setRequestHeader, я пытаюсь setResponseHeader, на самом деле – TheNavigat
@TheNavigator Мое предположение было бы то же самое, это может быть сделано на запрос изменения, так как впоследствии он уже установлен, попробуйте. Ошибка, которую вы получаете, когда пытаетесь 'setRequestHeader'' NS_ERROR_ILLEGAL_VALUE', если это правда, тогда я думаю, что мое предположение верно. – Noitidart
Я получаю эту ошибку, когда устанавливаю responseHeader на http-on-modify-request. Однако есть что-то странное. Я попробовал другой фрагмент кода, и он работал, но по какой-то причине вкладка «Сеть» не отображает измененные заголовки. Но это работает. Это очень странно. – TheNavigat