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, время: 14:15. |