У меня есть веб-страница на основе фреймов с 3 фреймами. Верхний слой, навигация слева и рамка содержимого справа внизу.
Теперь я хочу отображать всплывающее меню, когда пользователь щелкает правой кнопкой мыши фрейм содержимого. Поскольку div-контейнер не может выйти из фрейма, моя идея заключалась в том, чтобы поместить всю фрейм-страницу в новый iframe. На этой странице у меня может быть второй iframe, который является моим всплывающим меню.
Итак, теперь у меня есть этот макет:
<html> (start-page)
<iframe (real content)
<frameset
top-frame
navigation-frame
content-frame
>
>
<iframe> (my popup-menu, positioned absolutelly and hidden by default)
</html>
В моем информационном фрейме у меня есть событие onmouseover, назначенное тегу body. Это событие должно открывать всплывающее окно iframe в текущей позиции мыши. И именно в этом моя проблема: как получить координаты мыши относительно верхнего сайта (стартовая страница в моем черновике)?
В настоящее время у меня есть эта функция mouseDown (прямо сейчас работает только в IE, но заставить ее работать в FF & Co не должно быть проблемой ...)
function mouseDown(e)
{
if (window.event.button === 2 || window.event.which === 3)
{
top.popupFrame.style.left = event.screenX + "px";
top.popupFrame.style.top = event.screenY + "px";
top.popupFrame.style.display = "";
return false;
}
}
Как видите, переменные «event.screenX» и «screenY» - это не те переменные, которые я могу использовать, потому что они не относятся к главной странице.
Любые идеи?
Кроме того, поскольку вы используете только window.event в своем mouseDown, он будет работать только в IE и, возможно, в Opera.
Как я уже писал в своем вопросе, я уже знаю проблему "window.even" - так что это всего лишь тестовый код, ничего, наконец ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я настоятельно рекомендую переключить ваш набор фреймов на стандартный макет DIV с помощью css. Вот хорошая отправная точка для настройки множество разных макетов css.
Я знаю, что это может быть не то, что вы хотите слышать, но у фреймов есть много недостатков, помимо проблемы со всплывающим меню, с которой вы сейчас сталкиваетесь. Например:
Вы говорите, что это корпоративное приложение - вы должны поддерживать все основные браузеры или достаточно IE?
Я спрашиваю об этом, потому что в IE есть функция, которая работает именно так, как вам нужно:
window.createPopup(...)
http://msdn.microsoft.com/en-us/library/ms536392(VS.85).aspx
Всплывающее окно будет видно даже за пределами окна браузера! :-)
Чтобы показать это, используйте метод .show (...), который принимает аргументы положения и размера (подробности см. В MSDN). Приятно то, что вы также можете передать ссылку на элемент страницы, относительно которого расположена позиция, чтобы вы могли легко расположить всплывающее окно относительно определенного элемента страницы, определенного фрейма, определенного окна браузера или даже относительно рабочего стола. .
Хорошая вещь, но это не решает проблемы: в какой позиции мне открывать всплывающее окно?
Я добавил информацию о методе показа и относительном позиционировании. Это помогает?
Если вы планируете поддерживать только IE - вы можете попробовать использовать новое модальное окно, вызвав window.showModalDialog. Вы можете разместить новое окно в любом месте экрана.
У использования нового окна вообще и модального есть много недостатков ...
Кстати - FF 3 и выше тоже поддерживает window.showModalDialog
Рамки в кадрах - не оптимальное решение. Я предлагаю вам удалить страницу с определениями набора фреймов и заменить ее страницей с iframe. Таким образом, вы получаете только один уровень глубины фреймов.