2008-12-29 62 views
1

我有一個基於框架的網頁與3幀。頂線,左側導航和右下側內容框架。在JavaScript中的幀位置

現在,我想在用戶右鍵單擊內容框架時顯示一個彈出式菜單。由於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」 -event。此事件應在當前鼠標位置打開popup-iframe。正是這裏是我的問題:如何獲得鼠標座標相對於頂級網站(我的草稿中的開始頁面)?

目前我(只,現在工作在IE瀏覽器 - 但得到它在FF &工作合作不應該成爲問題...)具有這種鼠標按下功能

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」 - 變量不是我可以使用的變量,因爲它們與主頁不相關。

任何想法?

+0

幀以幀不是一個最佳的解決方案。我建議你刪除框架集定義的頁面,並用iframe替換頁面。這樣你只能獲得一層深度的幀。 – some 2008-12-29 08:20:56

+0

此外,由於您只在您的mouseDown中使用window.event,因此它只能在IE瀏覽器中運行,也許在Opera中運行。 – some 2008-12-29 08:24:37

回答

1

如果您只是計劃支持IE,您可以嘗試通過調用window.showModalDialog來使用新的模式窗口。 您可以在屏幕上的任何位置放置新窗口。

有很多缺點,使用一般一個新的窗口,而且是一個模態...

順便說一句 - FF 3和最多也 supports window.showModalDialog

0

我強烈建議使用css將你的框架集切換到標準的DIV佈局。這裏設置lots of different css layouts是一個很好的起點。

我知道這可能不是你想聽到的,但是除了你目前面臨的彈出菜單問題之外,框架還有許多缺點。例如:

  • 由於框架集通常是地址中唯一可見的頁面,所以框架難以或不可能正確書籤。
  • 通過在新的瀏覽器窗口中加載鏈接,很容易擺脫框架集。這意味着用戶可能會失去導航或迷路。
  • 它們在移動設備和純文本瀏覽器上不會退化。 CSS佈局的一大優點是,即使沒有打開任何樣式,它們仍然可用。
1

你說這是一個企業應用程序 - 你是否支持所有主流瀏覽器,或者IE瀏覽器足夠了?

我問這是因爲IE瀏覽器的作品完全一樣,你需要一個函數:

window.createPopup(...) 

http://msdn.microsoft.com/en-us/library/ms536392(VS.85).aspx

彈出將是可見的,即使外面的瀏覽器窗口! :-)

要顯示它,請使用接受位置和大小參數的.show(...)方法(有關詳細信息,請參閱MSDN)。好的是,您還可以傳遞相對於相對位置的頁面元素的引用,以便您可以輕鬆地將彈出框相對於某個頁面元素,特定框架,某個瀏覽器窗口甚至相對於桌面。