Javascript onunload - PullRequest
       17

Javascript onunload

0 голосов
/ 23 августа 2011

У меня большая часть этого сценария написана, но я знаю, что мне не хватает одного ключа.

Мне нужно вызвать функцию (см. Ниже) ...

function InternalLink() {
Page_ShowPopOnExit = false;
}

...в операторе if / else как-то внутри (см. код ниже), чтобы определить, что нажата была внутренняя ссылка, а не ссылка на страницу / внешнюю ссылку.

    function LinkConvert() {
var href;
                var anchors = document.getElementsByTagName('a');

                for(var y=0; y<anchors.length; y++)
                {
                                href = anchors[y].href.toLowerCase();
                                if (!(href.indexOf("http://")!=-1 && href.indexOf(MySiteDomain)==-1))
                                                {
                                                anchors[y].clickhandler=InternalLink()
                                                XBrowserAddHandlerPops(anchors[y],"click","clickhandler");
                                                }
                }
}

( последний ) общий код приведен ниже, Ty за помощь в завершении моего кода (или исправлении его):

function exitwindow() {
var Page_ShowPopOnExit=true;
var MySiteDomain='www.example.com';
var url = '/exit.html';
var win = 'toolbar=0,directories=0,menubar=0,scrollbars=0,resizable=0,width=250,height=300';
if (Page_ShowPopOnExit==true){
   open(url,'WindowName',win);
   } else (Page_ShowPopOnExit==false)
   {alert('Internal Link')}
}

function InternalLink() {
  Page_ShowPopOnExit = false;
}

function LinkConvert() {
var href;
                var anchors = document.getElementsByTagName('a');

                for(var y=0; y<anchors.length; y++)
                {
                                href = anchors[y].href.toLowerCase();
                                if (!(href.indexOf("http://")!=-1 && href.indexOf(MySiteDomain)==-1))
                                                {
                                                anchors[y].clickhandler=InternalLink()
                                                XBrowserAddHandlerPops(anchors[y],"click","clickhandler");
                                                }
                }
}
function XBrowserAddHandlerPops(target,eventName,handlerName) {
  if ( target.addEventListener ) {
    target.addEventListener(eventName, function(e){target[handlerName](e);}, false);
  } else if ( target.attachEvent ) {
    target.attachEvent("on" + eventName, function(e){target[handlerName](e);});
  } else {
    var originalHandler = target["on" + eventName];
    if ( originalHandler ) {
      target["on" + eventName] = function(e){originalHandler(e);target[handlerName](e);};
    } else {
      target["on" + eventName] = target[handlerName];
    }
  }
}

1 Ответ

0 голосов
/ 23 августа 2011

Догадываясь из своего кода, вы хотите сделать всплывающее окно, когда посетитель нажимает на ссылку, которая ссылается на другой домен.

Ваш код в настоящее время делает это, прикрепляя обработчик onclick ко всем ссылкам, если URL-адрес ссылки выглядит как внутренняя ссылка (нет "http://" или присутствует домен). Затем будет установлено логическое значение Page_ShowPopOnExit для false, что должно препятствовать тому, чтобы всплывающий хук генерировал всплывающее окно при его вызове (exitwindow - который не вызывается в вашем примере кода)

Я думаю, что есть более простой способ. А именно, просто прикрепите обработчик onclick, который сделает всплывающее окно для каждой ссылки, которая не является внутренней ссылкой:

function createPopup() {
    var url = '/exitexample.html';
    var win ='toolbar=0,directories=0,menubar=0,scrollbars=0,resizable=0,width=250,height=300';
    open(url,'WindowName',win);
}

var anchors = document.getElementsByTagName('a');
for(var y=0; y<anchors.length; y++) {
    href = anchors[y].href.toLowerCase();
    if (href.indexOf("http://") !== -1 && href.indexOf(MySiteDomain) !==-1) {
        anchors[y].onclick = createPopup; // you might want to replace this with attachEventListener etc.
    }
}
...