Определить текущую позицию мыши в IFRAME? - PullRequest
0 голосов
/ 01 августа 2011

У меня есть IFRAME внутри IFRAME, и мой метод getMousePosition не может получить текущую позицию мыши внутри iframe.Он работает в первом Iframe, но когда я вызываю getMousePosition из функции в родительском документе, он возвращает запасные значения 600 и 350. К вашему сведению: я не могу контролировать содержимое IFrame, поскольку оно генерируется, но это не такмеждоменный доступ.И IFRAMES, и родительский документ размещены на одном сервере.Я программирую только для Internet Explorer 8. Поэтому совместимость браузера не является проблемой.

  function getMousePosition(){
  if(!inframe)
      $(document).mousemove(function(e){
           mouseX = e.pageX 
           mouseY = e.pageY 
      });
  else
  {
    mouseX = 600;
    mouseY = 350;
  }

  //This is where I get the Iframe Document (I then parse through the document, picking up the specific links and storing them in the array verifiedlinks)
  var src = window.frames[iframeindex].document.getElementsByTagName("a");
  // This is where I call my function which uses the values returned by getMousePosition (verifiedlinks is an array of links inside the iframe):

    verifiedlinks[i].onmouseover = function() 
    {
        showPeopleDetails(this.getAttribute('username'));
    }
  // This should display User Details at the current Mousecoordinates
function showPeopleDetails(UserId){
var vpd = document.getElementById("PeopleDetails");
    if ( vpd != null ) {
        getMousePosition();
        vpd.style.left=mouseX+10; //mouseX and mouseY are defined globally
        vpd.style.top=mouseY+10;
        vpd.style.display="block";
    }
}

Я прочитал этот вопрос: РЕШЕННЫЙ ВОПРОС , но ответ не решил мою проблему.Я нашел этот вопрос , но ни один из ответов, похоже, не работает для меня.Мой новый отредактированный код:

function showPeopleDetails(UserId, x, y){
var vpd = document.getElementById("PeopleDetails");
try
{
    if ( vpd != null ) {
        //getMousePosition();
        //alert("MouseX: " +mouseX+" MouseY: "+mouseY);
        //vpd.style.left=mouseX+10;
        //vpd.style.top=mouseY+10;
        vpd.style.left = x +10 - window.frames[2].document.body.scrollLeft;
        vpd.style.top = y +10 - window.frames[2].document.body.scrollTop;
     }
}

1 Ответ

1 голос
/ 01 августа 2011

Если вы вызываете getMousePosition из родительского окна, то документ будет указывать на документ родительского окна.Вы должны вызывать этот метод в контексте iframe.Кроме того, где определяется inframe, и вы обновляете его значение для какого-либо события?

Вы можете использовать jquery, чтобы прикрепить события наведения мыши к ссылке.Используя это, вы получите объект события, который предоставляет координаты мыши по оси x / y ссылки относительно документа.Я надеюсь, что это поможет вам.

$(verifiedlinks[i]).mouseover(function(e){
        showPeopleDetails($(this).attr('username'), e.pageX, e.pageY);
}

function showPeopleDetailsNow(UserId, x, y){
var vpd = document.getElementById("PeopleDetails");
    if ( vpd != null ) {
        getMousePosition();
        //vpd.style.left=mouseX+10; //mouseX and mouseY are defined globally
        //vpd.style.top=mouseY+10;
        vpd.style.left= x +10 + $(document).scrollTop(); //mouseX and mouseY are defined globally
        vpd.style.top= y +10;
        vpd.style.display="block";
    }
}
...