Detect "allow-top-navigation" in iframe
Доброго времени суток, коллеги!
Есть у кого-нибудь идеи, как можно определить внутри iframe, что ему разрешено менять top.location? Т.е. либо не выставлен вообще sandbox, либо выставлен с "allow-top-navigation". "allow-scripts" легко детектится с помощью document.domain. А вот с "allow-top-navigation" появились проблемы. Конечно же, на ум сразу пришла такая идея:
try {
window.top.location.href = 'http://google.ru';
}
catch(e) {
console.log(false);
}
Но в этом случае, при "allow-top-navigation" будет происходить редирект. Мне же нужно просто узнать, можно ли сделать редирект в top, и в зависимости от этого отправить нужный параметр аяксом на сервер. Ещё была идея:
try {
window.top.location.hash = Math.random().toString(16);
}
catch(e) {
console.log(false);
}
Но родителю, в лучшем случае, можно менять только href (или весь location целиком). Буду благодарен за советы. :) |
Ни у кого нет каких-нибудь идей?
|
Rise, понятное дело. Тут именно идёт речь о наличии такого параметра в sandbox, ведь sandbox может вообще не стоять и скрипты при этом также будут работать.
Теперь появилась необходимость определить наличие параметра "allow-top-navigation" в sandbox, какими-нибудь хитрыми способами. |
Rise, детектится.
При sandbox="allow-scripts", document.domain выдаст пустую строку. Без sandbox выдаёт родительский домен.
function isSandboxed() {
var frame;
if(window !== window.parent) {
try {
frame = window.frameElement;
}
catch(e) {
frame = null;
}
if(frame === null) {
if(document.domain === '' && window.location.protocol !== 'data:') {
return true;
}
}
}
return !!frame && frame.hasAttribute('sandbox');
}
|
Rise, ой, не то написал, всё верно. Имел ввиду, что document.domain без sandbox выдаст домен фрейма, а с sandbox - пустую строку.
|
Видимо, мой вопрос всё-таки не решим, как я и предполагал. :)
|
| Часовой пояс GMT +3, время: 23:10. |