JavaScript HTML5 не работает в наборе фреймов

У меня есть страница, размещенная в чужом наборе фреймов, однако все они находятся в одном домене (мой контент загружается на их сервер через службу). Однако, ПОЧЕМУ они используют набор фреймов, это аргумент для другого дня. Они не изменят свою разметку, поэтому мне нужно найти обходной путь, который будет работать в моем коде. Я обнаружил странную проблему в своем тестовом примере, которая может помочь мне, если я смогу ее решить. Это проблема только в IE, как обычно.

Фрейм-оболочка выглядит так (с атрибутами без кавычек, да):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<HTML>
<HEAD>
    <TITLE>foo</TITLE>
    <META content="text/html; charset=UTF-8" http-equiv=Content-Type>
    <META content=IE=EmulateIE8 http-equiv=X-UA-Compatible>
</HEAD>
<FRAMESET frameSpacing=0 cols=8,*,8 frameBorder=1>
    <FRAME id=blackleft src="black.htm" name=blackleft scrolling=no>
    <FRAME id=content marginHeight=0 src="button.html" name=ScormContent marginWidth=0>
    <FRAME id=blackright src="black.htm" name=blackright scrolling=no>
</FRAMESET>
</HTML>

моя тестовая страница (button.html) выглядит так:

<!DOCTYPE html>
<html><head>
<meta http-equiv=X-UA-Compatible content="IE=Edge">
<title>test</title>
</head>

<body>
<section>
    <a href="javascript:alert('hello world');">
        <button>pressing me works unless you are in a frameset</button>
    </a>
</section>
<section>
    <a href="#" onclick="alert('hello world');">
        <button>Pressing me always works</button>
    </a>
</section>
</body>
</html>

Мне интересно, почему первая кнопка не отвечает в IE9, когда она используется в наборе фреймов - автономный запуск страницы приводит к нажатию кнопки.

Я много читал об обоих типах документов и трюке, совместимом с x-ua, еще больше запутался, чем когда-либо, и я не могу понять, что я должен делать. Как уже упоминалось, я не могу каким-либо образом изменить разметку набора фреймов, поэтому для того, чтобы мой код работал (который зависит от таких вещей, как события beforeunload и unload для передачи данных для сохранения, когда страница перемещается - которые не работают при работе в наборе фреймов). Моя интуиция подсказывает мне, что пример с кнопкой показывает, что я близок к основной проблеме, а Интернет говорит мне, что это связано с x-ua-совместимым тегом и режимом причуд, но много чтения по этому вопросу не принесло мне пользы. решение еще... например если я захочу принудительно перевести IE9 в (скажем) режим совместимости с IE7, тогда вся моя работа по стилю страниц выйдет из окна.


person frumbert    schedule 23.05.2012    source источник


Ответы (1)


IE имеет уникальную безопасность iframe:

Атрибут SECURITY ограничивает использование javascript, vbscript и протоколов в URL-адресе. Например, в ограниченном фрейме или iframe исходный файл не может выполнить следующий код:

<a href="javascript:alert('Disallowed in restricted FRAME or IFRAME!');">JavaScript Link</a>
person Paul Sweatte    schedule 24.10.2012
comment
ааа, но вы видите, что в моем случае мой контент работает в их домене с одним и тем же протоколом как в верхнем наборе фреймов, так и в моем контенте. Их тег набора фреймов, как вы видите выше, дополнен атрибутами без кавычек. Видите ли, я загружаю пакет на свой сервер. Мой сервер использует API для отправки пакета на свой сервер. Их сервер взламывает набор фреймов вокруг него (требование в их конце, никаких «если» или «но», именно так стандарт, который они поддерживают, определяет, что вы должны это делать), и некоторые функции внутри моего кода ломаются в IE9 и ниже. - person frumbert; 24.10.2012
comment
о, и я удивлен, увидев, что в ваших ссылках на Microsoft упоминается: Информация о стандартах - здесь нет применимых стандартов. С таким же успехом можно разместить это на каждой странице вашего сайта, а, Microsoft? - person frumbert; 24.10.2012