>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >по событию открыть ссылку в новой вкладке http://forum.mozilla-russia.org/viewtopic.php?id=8917 |
Ист > 12-03-2006 17:52:57 |
Нужно по событию, нажатие клавиши, открыть ссылку в новой вкладке. Выделить код Код:<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> Видел несколько месяцев назад русскоязычный сайт на котором подробно расписывались все параметры открытия окон (и не только их), а сейчас не нашёл. Может у кого-нибудь есть ссылочка на него? |
Anton > 12-03-2006 18:28:34 |
Ист пишет
Новая вкладка ? Скорее всего так: заменить на: |
Ист > 13-03-2006 19:52:37 |
не сработало |
Anton > 13-03-2006 20:08:41 |
Ист пишет
Скобочки пропустил |
Ист > 13-03-2006 20:55:08 |
Anton А если нужно чтобы часть открывалась в новой вкладке, а некоторые продолжали открывать в новом окне. |
Anton > 13-03-2006 22:17:09 |
Идея такая. Выделить код Код: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); но, предполагаю, должно сработать. |
Ист > 14-03-2006 18:20:01 |
Anton Спасибо, но не работает.
Выделить код Код:function iny_postEvent(ev) { iny_cmdStack.push(ev); if (!iny_working) { iny_working=true; iny_onload(); } } |
Anton > 14-03-2006 21:22:29 |
Ист пишет
тогда так:<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> |
Ист > 15-03-2006 17:04:17 |
Anton |
Ист > 16-03-2006 17:59:38 |
Хотя есть ещё вопрос. |
Anton > 16-03-2006 18:14:18 |
Ист пишет
Честно говоря, даже не знаю. Есть один вариант, не знаю - будет работать или нет. Идея такая: Выделить код Код: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", ""); } но... не знаю, не знаю. |
Ист > 16-03-2006 18:33:46 |
Anton |