Полезная информация

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

№112-03-2006 17:52:57

Ист
Участник
 
Группа: Members
Зарегистрирован: 14-07-2005
Сообщений: 10

по событию открыть ссылку в новой вкладке

Нужно по событию, нажатие клавиши, открыть ссылку в новой вкладке.
 
В приведённом примере открывается в том же месте.
Какую команду надо изменить чтобы открывалось окошко в новой вкладке? (автор расширения не я)

Выделить код

Код:

<script type="application/x-javascript">
   <![CDATA[
function pushProgram(program)
{
// XXX remove last ';'
    var arr = program.split(";");
    for (var i=0; i <  arr.length; i++) {
	 var tmp = arr[i].split("/");                   
         var event="iny_clickAtLink";
         var evalfunc="gotLink==sampLink";
         var skip=0;

    	 if (tmp.length>1) {
            if (tmp[1].indexOf("m")>=0) {
               evalfunc="gotLink.indexOf(sampLink) >= 0";
           }
         }
         if (tmp.length>2) {
            var n=Number(tmp[2]);
            if (!isNaN(n)) {
                skip=n;
            }
         }
        iny_postEvent( event+"(window._content,'"+tmp[0]+"',"+String(skip)+",'"+evalfunc+"');");

    }
}

function iny_clickAtLink(curWindow, sampLink,skip,evalfunc)
{
    var gotLink;
    var range = document.createRange();
    var sk=Number(skip);

    var alinks = curWindow.document.links;

    for(var i = 0; i < alinks.length; i++) {
	var link = alinks[i];
	range.selectNode(link);
	gotLink= iny_trim(range.toString());

	// If the text is in the lookup table,
	// go to the URL

	if (eval(evalfunc)) {
//	    alert('found matching name!');
          if (sk>0) {
              sk=sk-1;
          } else {
   	      return iny_openLink(curWindow, link);
          }
        }
    }
    return false;
}

function iny_openLink (curWindow, linkNode)
{
    // If it's got an onclick attr, then try to 
    // simulate a mouse click to activate link.
    if (linkNode && linkNode.hasAttribute("onclick")) 
	{
	    // alert(linkNode.getAttribute("onclick"));
	    var e = document.createEvent("MouseEvents");
	    e.initMouseEvent("click", 1, 1, window, 1, 0,0,0,0,0,0,0,0,0,linkNode);
	    linkNode.dispatchEvent(e);
	}
    else
	{
	    curWindow.open(linkNode.href, "_self", "");
	}
    return true;
 }

window.addEventListener("load", function() { iny_init(); }, true);

   ]]>
   </script>

<keyset id="MyKeyset">
    <key id="key2" modifiers="" key="1" disabled="false" oncommand="pushProgram('войти/m;проверить почту');" />
    <key id="key3" modifiers="" key="2" disabled="false" oncommand="pushProgram('отправить группе;группа DerVis');" />
    <key id="key8" modifiers="" key="3" disabled="false" oncommand="pushProgram('переместить в раздел;Корзина');" />
</keyset>
</overlay>

Видел несколько месяцев назад русскоязычный сайт на котором подробно расписывались все параметры открытия окон (и не только их), а сейчас не нашёл. Может у кого-нибудь есть ссылочка на него?

Отсутствует

 

№212-03-2006 18:28:34

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: по событию открыть ссылку в новой вкладке

Ист пишет

...
Какую команду надо изменить чтобы открывалось окошко в новой вкладке?...
...

Новая вкладка ? Скорее всего так:

Выделить код

Код:

curWindow.open(linkNode.href, "_self", "");

заменить на:

Выделить код

Код:

window.getBrowser.addTab(linkNode.href);

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№313-03-2006 19:52:37

Ист
Участник
 
Группа: Members
Зарегистрирован: 14-07-2005
Сообщений: 10

Re: по событию открыть ссылку в новой вкладке

Скорее всего так

не сработало :(

Отсутствует

 

№413-03-2006 20:08:41

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: по событию открыть ссылку в новой вкладке

Ист пишет

Скорее всего так

не сработало :(

Скобочки пропустил :)

Выделить код

Код:

window.getBrowser().addTab(linkNode.href);

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№513-03-2006 20:55:08

Ист
Участник
 
Группа: Members
Зарегистрирован: 14-07-2005
Сообщений: 10

Re: по событию открыть ссылку в новой вкладке

Anton
Спасибо! Работает! ;)

А если нужно чтобы часть открывалась в новой вкладке, а некоторые продолжали открывать в новом  окне.
Можно скопировать функции(pushProgram, iny_clickAtLink, iny_openLink) изменив названия, сделав в них разные способы открытия. Или есть другой, менее громоздкий способ?

Отсутствует

 

№613-03-2006 22:17:09

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: по событию открыть ссылку в новой вкладке

Идея такая.
изменяем немного:
функцию pushProgram:

Выделить код

Код:

function pushProgram(program)
{
...
         var evalfunc="(gotLink==sampLink)?0:";
         var skip=0;

         if (tmp.length>1) {
            if (tmp[1].indexOf("m")>=0) {
               evalfunc="(gotLink.indexOf(sampLink) >= 0)?0:";
           }
         }
         if (arr[arr.length-1]=="t")
            evalfunc+="2";
         else
            evalfunc+="1";
...
}

функцию iny_clickAtLink:

Выделить код

Код:

function iny_clickAtLink(curWindow, sampLink,skip,evalfunc)
{
...
    if (eval(evalfunc)==0) {
//        alert('found matching name!');
          if (sk>0) {
              sk=sk-1;
          } else {
             return iny_openLink(curWindow, link, eval(evalfunc)==2);
          }
        }
    }
...
}

функцию iny_openLink:

Выделить код

Код:

function iny_openLink (curWindow, linkNode, openInTab)
{
...
    else
    {
        if (openInTab)
            window. getBrowser (). addTab (linkNode. href);
        else
            curWindow. open (linkNode. href, "_self", "");
    }
...
}

и блок

Выделить код

Код:

<keyset id="MyKeyset">
    <key id="key2" modifiers="" key="1" disabled="false" oncommand="pushProgram('войти/m;проверить почту;w');" />
    <key id="key3" modifiers="" key="2" disabled="false" oncommand="pushProgram('отправить группе;группа DerVis;t');" />
    <key id="key8" modifiers="" key="3" disabled="false" oncommand="pushProgram('переместить в раздел;Корзина;w');" />
</keyset>

Там, где в <key id=... oncommand="...;w я поставил букву w, подразумевается открытие в окне. А там где ;t - в новой вкладке.

p.s. логику кода особенно не разбирал (к тому же, отсутствует определение функции iny_postEvent); но, предполагаю, должно сработать.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№714-03-2006 18:20:01

Ист
Участник
 
Группа: Members
Зарегистрирован: 14-07-2005
Сообщений: 10

Re: по событию открыть ссылку в новой вкладке

Anton Спасибо;), но не работает.

p.s. логику кода особенно не разбирал (к тому же, отсутствует определение функции iny_postEvent); но, предполагаю, должно сработать.

Выделить код

Код:

function iny_postEvent(ev) {
    iny_cmdStack.push(ev);
    if (!iny_working) {
        iny_working=true;
        iny_onload();
    }
}

Отсутствует

 

№814-03-2006 21:22:29

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: по событию открыть ссылку в новой вкладке

Ист пишет

Anton Спасибо;), но не работает.
...

тогда так:<script type="application/x-javascript">

Выделить код

Код:

<![CDATA[
function pushProgram(program)
{
// XXX remove last ';'
    var arr = program.split(";");
    for (var i=0; i <  arr.length; i++) {
     var tmp = arr[i].split("/");                   
         var event="iny_clickAtLink";
         var evalfunc="(gotLink!=sampLink)?0:";
         var skip=0;

         if (tmp.length>1) {
            if (tmp[1].indexOf("m")>=0) {
               evalfunc="(gotLink.indexOf(sampLink) < 0)?0:";
           }
           if (tmp[1].indexOf("t")>=0)
                evalfunc+="2";
           else
                evalfunc+="1";
         }
         else
            evalfunc+="1";
         if (tmp.length>2) {
            var n=Number(tmp[2]);
            if (!isNaN(n)) {
                skip=n;
            }
         }
        iny_postEvent( event+"(window._content,'"+tmp[0]+"',"+String(skip)+",'"+evalfunc+"');");

    }
}

function iny_clickAtLink(curWindow, sampLink,skip,evalfunc)
{
    var gotLink;
    var range = document.createRange();
    var sk=Number(skip);

    var alinks = curWindow.document.links;

    for(var i = 0; i < alinks.length; i++) {
    var link = alinks[i];
    range.selectNode(link);
    gotLink= iny_trim(range.toString());

    // If the text is in the lookup table,
    // go to the URL

    if (eval(evalfunc)!=0) {
//        alert('found matching name!');
          if (sk>0) {
              sk=sk-1;
          } else {
             return iny_openLink(curWindow, link, eval(evalfunc)==2);
          }
        }
    }
    return false;
}

function iny_openLink (curWindow, linkNode, openInTab)
{
    // If it's got an onclick attr, then try to 
    // simulate a mouse click to activate link.
    if (linkNode && linkNode.hasAttribute("onclick")) 
    {
        // alert(linkNode.getAttribute("onclick"));
        var e = document.createEvent("MouseEvents");
        e.initMouseEvent("click", 1, 1, window, 1, 0,0,0,0,0,0,0,0,0,linkNode);
        linkNode.dispatchEvent(e);
    }
    else
    {
        if (openInTab)
            window. getBrowser (). addTab (linkNode. href);
        else
            curWindow. open (linkNode. href, "_self", "");
    }
    return true;
 }
window.addEventListener("load", function() { iny_init(); }, true);

   ]]>
   </script>

<keyset id="MyKeyset">
    <key id="key2" modifiers="" key="1" disabled="false" oncommand="pushProgram('войти/mt;проверить почту');" />
    <key id="key3" modifiers="" key="2" disabled="false" oncommand="pushProgram('отправить группе/t;группа DerVis');" />
    <key id="key8" modifiers="" key="3" disabled="false" oncommand="pushProgram('переместить в раздел;Корзина/t');" />
</keyset>
</overlay>

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№915-03-2006 17:04:17

Ист
Участник
 
Группа: Members
Зарегистрирован: 14-07-2005
Сообщений: 10

Re: по событию открыть ссылку в новой вкладке

Anton
Спасибо! Всё работает как часы.

Отсутствует

 

№1016-03-2006 17:59:38

Ист
Участник
 
Группа: Members
Зарегистрирован: 14-07-2005
Сообщений: 10

Re: по событию открыть ссылку в новой вкладке

Хотя есть ещё вопрос.
при повторном нажатии новая вкладка не появляется т.е. каманда не выполняется повторно.
Может там нужно какие-нибудь дополнительные параметры указать?

Отсутствует

 

№1116-03-2006 18:14:18

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: по событию открыть ссылку в новой вкладке

Ист пишет

...
при повторном нажатии новая вкладка не появляется т.е. каманда не выполняется повторно.
Может там нужно какие-нибудь дополнительные параметры указать?

Честно говоря, даже не знаю. Есть один вариант, не знаю - будет работать или нет. Идея такая:
заменить

Выделить код

Код:

else
    {
        if (openInTab)
            window. getBrowser (). addTab (linkNode. href);
        else
            curWindow. open (linkNode. href, "_self", "");
    }

на

Выделить код

Код:

else
    {
        if (openInTab)
        {
            window. getBrowser (). addTab (linkNode. href);
            iny_working = false;
        }
        else
            curWindow. open (linkNode. href, "_self", "");
    }

но... не знаю, не знаю.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1216-03-2006 18:33:46

Ист
Участник
 
Группа: Members
Зарегистрирован: 14-07-2005
Сообщений: 10

Re: по событию открыть ссылку в новой вкладке

Anton
Ты зря сомневался :)
Спасибо!

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]