Форумы Форум www.proxomitron.ru
Все о программе Proxomitron
Главная  • FAQ для форума  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Личные сообщения  •  Вход
 Ссылки открываются в текущем окне.
 Сайт -> Форумы » Общие вопросы
Следующая тема
Предыдущая тема

Новая тема  Ответить
Автор Сообщение
Tepliy Sneg
Newbee
Newbee


Зарегистрирован: 24.07.2006
Сообщения: 2

СообщениеДобавлено: Пн, Июл 24 2006 11:25 Цитировать |  |  | 

Доброго времени.
Недавно решил перейти с АдМунчер - по "этическим соображениям" Smile на Проксимитрон. Загрузил вашу версию и потихоньку разбираюсь, как , что и счем едят .Вопрос в другом - все ссылки , которые раньше открывались в новом окне браузера , теперь открываются в текущем окне. Это очень неудобно - из-за этого я не пользуюсь Гуглом Smile

После прочтения хелпа , подключил - Frame Jumper-Outer , но это не полностью решило мою проблемку. Помогите разобраться .

Браузер Опера , хотя не думаю , что проблемма в нем.
К началу Профиль Сообщение
Unknown Mystic
Platinum Member
Platinum Member


Зарегистрирован: 26.09.2005
Сообщения: 471
Откуда: г. Мытищи, Московская обл.

СообщениеДобавлено: Пн, Июл 24 2006 12:01 Цитировать |  |  | 

Если не ошибаюсь, надо отключить фильтр Kill new window anchors [ALX]. Не могу сейчас проверить... Вот если б ты ссылку на такую страницу оставил...
К началу Профиль Сообщение ICQ
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2635
Откуда: SPb

СообщениеДобавлено: Пн, Июл 24 2006 12:15 Цитировать |  |  | 

Tepliy Sneg:

Проблема как раз в браузере (хотя сам вопрос скорее концептуальный). Когда любую ссылку можно по собственному выбору открыть в новом окне/табе одним кликом, то не хочется терпеть самоуправство всяких сайтов по открыванию лишних окон во время навигации.

Попробуй, может, у тебя тоже настраивается Ctrl-click, Middle-click или что-нибудь подобное.

Ну а если хочется оставить свои окна на произвол посещаемых сайтов, то Unknown Mystic правильно фильтр указал. Отключи и всё. А Frame Jumper-Outer не советую включать -- возможны глюки.
К началу Профиль Сообщение
Tepliy Sneg
Newbee
Newbee


Зарегистрирован: 24.07.2006
Сообщения: 2

СообщениеДобавлено: Пн, Июл 24 2006 12:26 Цитировать |  |  | 

Спасибо всем ответившим .
Отключил Kill new window anchors [ALX] и все стало на свои места .

chAlx , не хочу затевать спор на тему любимого браузера Smile , но Опера тоже поддерживает и ctrl+клик на ссылке и у меня еще клик на колесе мыши тоже открывает ссылку в новом табе. Но постоянно этим пользоваться "сил нет" Smile Да и особого желания. Плюс ко всему Опера у меня сама блокирует ненужные поп-апы.

Все равно огромное спасибо.
К началу Профиль Сообщение
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Вт, Авг 08 2006 14:13 Цитировать |  |  | 

Цитата:

то не хочется терпеть самоуправство всяких сайтов по открыванию лишних окон во время навигации


давно решил эту проблему. говорю про ИЕ, про другие браузеры не знаю. создаёте букмарклет и засовываете на одну из полосок в ИЕ:
Код:

javascript: function winname() { if( window.name=="_new" ){ alert('Already set, you dumbass!');} else{ window.name="_new" } } winname()


а в проксомитроне используем скрипт:

Код:

[Patterns]
Name = "Blank 2 New"
Active = TRUE
URL = "$TYPE(htm)&(^*(*.js))"
Limit = 256
Match = "_blank"
Replace = "_new"


когда стартуете винды, первым делом стартуйте две инстанции ИЕ и дайте 2-ой инстанции название _new. теперь почти все линки будут открываться в уже открытой инстанции. очень редко оригинальное название не _blank. только название инстанции иногда вылетает, например при использовании post формуляров. ну так нажимаете ещё раз на кнопочку, много времени не стоит. кстати, каждая инстанция ИЕ состоит из более 100 отдельных окон и жрёт 15 мегов памяти минимум. поэтому очень важно, чтобы новые инстанции не открывались. мне двух инстанций хватает на весь день.в левой например ruboard открыт, в правой открываются rapidshare линки с рубоарда. и т.д.
К началу Профиль Сообщение Отправить e-mail
Partyzan
Platinum Member
Platinum Member


Зарегистрирован: 15.02.2005
Сообщения: 319

СообщениеДобавлено: Чт, Сен 21 2006 23:16 Цитировать |  |  | 

WRFan писал(а):
давно решил эту проблему. говорю про ИЕ, про другие браузеры не знаю. создаёте букмарклет и засовываете на одну из полосок в ИЕ: ...

Очень индивидуальное решение
К началу Профиль Сообщение
MikVolg
Member
Member


Зарегистрирован: 05.10.2006
Сообщения: 58
Откуда: Volgodonsk

СообщениеДобавлено: Чт, Окт 05 2006 21:33 Цитировать |  |  | 

Ну не знаю... В Опере клик колесом и нет проблем. Я даже на ссылках типа Рамблеровских колесом кликаю, привычка Smile .
К началу Профиль Сообщение
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Вт, Дек 19 2006 18:22 Цитировать |  |  | 

Цитата:

а в проксомитроне используем скрипт:

Код:

[Patterns]
Name = "Blank 2 New"
Active = TRUE
URL = "$TYPE(htm)&(^*(*.js))"
Limit = 256
Match = "_blank"
Replace = "_new"


переписал скрипт с помощью getElementsByTagName, теперь параметры target property задаются через jscript налету, вместо того, чтобы менять настройки каждого линка через прокс:

Код:

<script language="JScript">
function changeTarget()
{
var theLinks = document.body.getElementsByTagName("a");
var theLinks_length = theLinks.length
for (var theLinksCount = 0; theLinksCount < theLinks_length; theLinksCount++)
{
if (theLinks[theLinksCount].getAttribute("target") == "_blank")
{
theLinks[theLinksCount].setAttribute("target", "_new");
}
else if ( (theLinks[theLinksCount].getAttribute("target") !="_self") && (theLinks[theLinksCount].getAttribute("target") !="_parent")  && (theLinks[theLinksCount].getAttribute("target") !="") && (self.frames.length == 0) )
{
theLinks[theLinksCount].setAttribute("target", "_new");
}
alert ( theLinks[theLinksCount].getAttribute("target"))
}
}
changeTarget()
</script>


пришлось покорпеть над скриптом. первым шагом меняем все _blank таргеты на _new, или любое другое название, заданное в "вспомогательном" окне IE. вторым шагом проверяем, сидит ли документ во фреймсете. если да, тогда таргеты не меняются, т.к. названия таргетов во фреймсетах бывают разные, при изменении таргета страница тогда откроется не во фрейме, а в вспомогательном окне браузера. ну и _self и _parent, а также пустые таргеты тоже не меняются. надо ещё _top таргет добавить в исключения.

а вся проблема из за того, что горе вебмастеры задают где попало несуществующие таргеты с выдуманными именами, вместо того, чтобы использовать _blank.
К началу Профиль Сообщение Отправить e-mail
Unknown Mystic
Platinum Member
Platinum Member


Зарегистрирован: 26.09.2005
Сообщения: 471
Откуда: г. Мытищи, Московская обл.

СообщениеДобавлено: Вт, Дек 19 2006 22:03 Цитировать |  |  | 

Ну почему не делать, например, так:
Код:
<script language="JScript">
  var theLinks = document.body.getElementsByTagName("a");
  var tmp_target;
  for (var theLinksCount = theLinks.length - 1; theLinksCount >= 0; theLinksCount--) {
    tmp_target = theLinks[theLinksCount].getAttribute("target");
    if ((tmp_target == "_blank") || ((tmp_target !="_self") && (tmp_target !="_parent")  && (tmp_target !="") && (self.frames.length == 0))) {
      theLinks[theLinksCount].setAttribute("target", "_new");
    }
    alert (tmp_target);
  }
</script>

И проще, и понятнее, да и вообще хоть прочитать, что написано можно...
К началу Профиль Сообщение ICQ
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Ср, Дек 20 2006 18:20 Цитировать |  |  | 

Цитата:

if ((tmp_target == "_blank") || ((tmp_target !="_self") && (tmp_target !="_parent") && (tmp_target !="") && (self.frames.length == 0)))


да, так лучше, thanx
К началу Профиль Сообщение Отправить e-mail
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Чт, Дек 28 2006 04:26 Цитировать |  |  | 

таргеты ссылок то я на "_new" изменил, а как заблокировать изменение названия вспомогательного окна? сволочные страницы его постоянно меняют. для этого накатал vbscript и посадил его в бесконечный loop, он себе так тихонечко крутится, посапывает и каждые 100 миллисекунд проверяет интернет активность 2-ого ИЕ окна слева (от СТАРТ кнопки). это и есть моё вспомогательное окно. как только я страницу какую открыл, он раз! и изменил снова название окна на нужное путём append-а скрипта в SCRIPT элемент браузера.

скрипт также проверяет, существует ли вообще 2-ое ИЕ окно, если нет, он терпеливо ждёт. как только я открыл 2-ое ИЕ окно, он меняет его название и делает location.replace окна на самого себя, дело в том, что возвращение на страницу, на которой было изменено название окна фактически убивает его название полностью, поэтому скрипт мне не даёт возвращаться на "первую" страницу через back кнопку, после location.replace-а предыдущий документ в history не сохраняется.

коммуницирую я с ИЕ окнами с помощью objShell.Windows объекта, очень интересная штука. с её помощью я могу с ИЕ окнами делать, что угодно через ActiveX интерфейс ИЕ. вот например примерчик нормализации ИЕ окон (открытых без разных полосок или в ограниченном размере):

http://forum.ru-board.com/topic.cgi?forum=33&topic=1491&start=162&limit=1&m=1#1

через ActiveX интерфейс я также получаю доступ к document элементу, открытом на данный момент в ИЕ, и таким образом ко всему ИЕ DOM-у! могу приказать ИЕ убить опеределённый элемент на странице, перешвартоваться на другую страницу, открыть новый фрейм. вот так например можно угробить один из фреймов текущего документа (если документ вообще является фреймсетом):

Код:

set objShell = CreateObject("Shell.Application")
set objShellWindows = objShell.Windows
set SecondWindow =  objShellWindows.Item(1)

SecondWindow.Document.getElementsByTagName("frame").Item(2).removeNode


этот код прибивает 3-ий фрейм 1-ого фреймсета второго слева окна ИЕ. 3-ий, потому что объекты считаются, начиная с нуля, а не единицы. после убийства фрейма в ИЕ просто серый квадратик вместо фрейма. скажем, фрейм являлся рекламой. прибил и усё Razz Mr. Green
К началу Профиль Сообщение Отправить e-mail
Unknown Mystic
Platinum Member
Platinum Member


Зарегистрирован: 26.09.2005
Сообщения: 471
Откуда: г. Мытищи, Московская обл.

СообщениеДобавлено: Чт, Дек 28 2006 10:54 Цитировать |  |  | 

WRFan писал(а):
таргеты ссылок то я на "_new" изменил, а как заблокировать изменение названия вспомогательного окна? сволочные страницы его постоянно меняют. для этого накатал vbscript и посадил его в бесконечный loop, он себе так тихонечко крутится, посапывает и каждые 100 миллисекунд проверяет интернет активность 2-ого ИЕ окна слева (от СТАРТ кнопки). это и есть моё вспомогательное окно. как только я страницу какую открыл, он раз! и изменил снова название окна на нужное путём append-а скрипта в SCRIPT элемент браузера.


А не лучше в конце страницы проксом добавить скрипт меняющий имя страницы на то, что надо. А то бесконечный цикл, выполняющийся каждые 100 миллисекунд как-то совсем уж грустно...
К началу Профиль Сообщение ICQ
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Чт, Дек 28 2006 23:58 Цитировать |  |  | 

Цитата:

А не лучше в конце страницы проксом добавить скрипт меняющий имя страницы на то, что надо. А то бесконечный цикл, выполняющийся каждые 100 миллисекунд как-то совсем уж грустно...


ты конечно полностью прав, тем более, что у меня старый компьютер и скрипт жрёт 4-5 процентов cpu, и это после того, как я его оптимировал, до этого он жрал больше 80%! к сожалению, это решение невозможно, т.к. прокс не разбирается, какие окна ИЕ на данный момент открыты. он же будет скрипт в КАЖДОЕ ИЕ окно вставлять, а мне надо только название вспомогательного окна менять, а если прокс вставит скрипт в каждое окно, то и первое окно получит название вспомогательного окна и тогда все ссылки будут открываться в первом окне.

поэтому я всю микрозофтскую страницу обыскал в поисках property окна, которая бы не менялась и через которую бы прокс (или вернее вставленный яваскрипт) мог бы отличать нужное окно от всех других. к сожалению, такой property являются только размеры окна, т.е. его ширина и высота. т.е. я мог бы изменить размеры вспомогательного окна, опять же через ActiveX:

Код:

set objShell = CreateObject("Shell.Application")
set objShellWindows = objShell.Windows
set SecondWindow =  objShellWindows.Item(1)
SecondWindow .height = 833


и потом написать яваскрипт, который бы проверял размеры окна, и если окно имеет высоту меньше 842-ух пикселей (или какое там в общем разрешение проставлено у юзера), то тогда скрипт должен менять название окна:
Код:

if screen.height < 842
window.name="_new"
...


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

скрипт, вызывающий Shell.Application object, кстати вставить в интернет страницы невозможно, вернее, вставить то можно, но работать не будет, потому что с помощью этого объекта можно получить доступ ко всему компьютеру, эта функция стандартно даже для локальных хтмл файлов отключена в ИЕ, но для локалки я её включил, мне нужен доступ к реестру и к activeX-у в локалке:

http://forum.ru-board.com/topic.cgi?forum=31&topic=10703

но я и не подумаю включать эту функцию для интернет зоны (если это вообще возможно), а то мне какая нибудь злостная страница отформатирует хард или удалит улья реестра, вот будет весело
К началу Профиль Сообщение Отправить e-mail
Unknown Mystic
Platinum Member
Platinum Member


Зарегистрирован: 26.09.2005
Сообщения: 471
Откуда: г. Мытищи, Московская обл.

СообщениеДобавлено: Пт, Дек 29 2006 11:44 Цитировать |  |  | 

Я что-то не понял... Т.е. ты можешь обращаться к вспомогательной странице, а определить, является ли страница вспомогательной - нет что ли? Почему в скрипте не сделать проверку страницы по аналогии с обращением к ней?

А свои свойства в IE создать можно? Массив окон в IE есть?
К началу Профиль Сообщение ICQ
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Сб, Дек 30 2006 15:38 Цитировать |  |  | 

Цитата:

Т.е. ты можешь обращаться к вспомогательной странице, а определить, является ли страница вспомогательной - нет что ли? Почему в скрипте не сделать проверку страницы по аналогии с обращением к ней?


я всё это могу сделать, но только через локально вызванный скрипт. такие мощные скрипты, вставленные в код страницы (в документ), работают только в локалке (т.е. если скрипт локально вызван, неважно, встроен ли он в саму страницу, или запущен в виде отдельного vbs файла). скрипты, вызывающие Shell.Application объект не будут работать, если скрипт вызван через открытую в окне ИЕ страницу (document), если страница является НЕ локальной (т.е. http протокол)

а без Shell.Application вообще ничего не возможно сделать или выяснить (кроме конечно получения "безобидной" и маловажной информации, вроде разрешения компьютера посетителя или названия окна), т.к. без этого объекта нет связи с Shell-ом. он просто не отвечает на запросы. и очень хорошо, что не отвечает. вдруг какая нибудь http страница через встроенный сорс код передаст приказ удалить часть реестра?

Цитата:

А свои свойства в IE создать можно?


да все свойства и так уже есть. но не вся информация передаётся. например в ИЕ есть ограничения на фреймы - можно запросить информацию о SRC свойстве фрейма, открытом в текущем документе, но не его точный адрес, хотя это глупо, т.к. точный адрес всегда домен+src. почитай на msdn.microsoft.com , там написано про все ограничения.

иногда это конечно раздражает. я постоянно получаю тут и там "permission denied" ошибку, ИЕ упрямится и не хочет передавать инфу. но иногда ограничения действительно обоснованы, как в предыдущем примере описано
К началу Профиль Сообщение Отправить e-mail
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Вт, Янв 02 2007 14:31 Цитировать |  |  | 

блин, существует оказывается ещё один метод задавания таргета линков, а именно через BASE элемент. только что на него наткнулся. меняем и его таргет:

Код:

var theBase = document.getElementsByTagName("BASE")[0]

if ((theBase.getAttribute("target") !="") && (theBase.getAttribute("target") !="_self"))
{
theBase.setAttribute("target", "_new");
}
К началу Профиль Сообщение Отправить e-mail
Unknown Mystic
Platinum Member
Platinum Member


Зарегистрирован: 26.09.2005
Сообщения: 471
Откуда: г. Мытищи, Московская обл.

СообщениеДобавлено: Вт, Янв 02 2007 17:21 Цитировать |  |  | 

Нет спасибо. В MSDN что-то не хочется :)

Неполучится использовать даже если адрес скрипта localhost и т.д.?

Я имею ввиду создавать свойства у самого IE (не знаю какой там объект тфмшпфещк или еще чего...), а не у окон, т.е. чтоб они были общие для всех окон.
И так и не услышал, есть ли у IE массив окон...
К началу Профиль Сообщение ICQ
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Ср, Янв 03 2007 08:48 Цитировать |  |  | 

Цитата:

Неполучится использовать даже если адрес скрипта localhost и т.д.?


под windows существуют 5 зон - для интернета, для интрАнета (именно localhost к этой зоне помоему и относится), для локальных файлов, restricted зона, unrestricted зона, и всё зависит от настроек в каждой зоне. некоторые настройки можно проставить через ИЕ, но большинство -через реестр:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones

Цитата:

Я имею ввиду создавать свойства у самого IE (не знаю какой там объект тфмшпфещк или еще чего...), а не у окон, т.е. чтоб они были общие для всех окон.
И так и не услышал, есть ли у IE массив окон...


я лично про такое не слышал

кстати, мой BASE скрипт не работает (выдаёт ошибку), если BASE элемента в странице нет. подправил:
Код:

if ( (document.getElementsByTagName("BASE")[0] != null) && (document.getElementsByTagName("BASE")[0].getAttribute("target") !="") && (document.getElementsByTagName("BASE")[0].getAttribute("target") !="_self") )
{
document.getElementsByTagName("BASE")[0].setAttribute("target", "_new");
}
К началу Профиль Сообщение Отправить e-mail
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Сб, Янв 27 2007 23:43 Цитировать |  |  | 

Цитата:

заблокировать изменение названия вспомогательного окна


Я всё таки решил изменять название вспомогательного окна, стартуя вспомогательную инстанцию ИЕ в виде ActiveX объекта. Хотя для этого тоже требуется VBScript, который крутится в бесконечном loop-е, это всё же стоит меньше cpu ресурсов, чем отдельный скрипт, о котором я писал наверху.

Создал скриптик и добавил линк на него в таск бар возле ИЕ иконки. теперь я первую ИЕ инстанцию стартую в виде обычной программы, т.е. просто вызываю iexplore.exe, а второе окно - в виде ActiveX объекта через VBScript и подключаю к нему события. Когда ИЕ объект открывает новую страницу или когда открывается диалог для скачивания файла, события включаются и наименование окна меняется. Я подробно об этом написал в микрозофтских news группах:

news://msnews.microsoft.com/msnews.microsoft.com
Я там кстати под именем "Richard Stallmann" пишу, если увидите, это я, хехе. напишу и тут скрипт, может кого интересует:

Код:

ON ERROR RESUME NEXT
Set objIE = WScript.CreateObject("InternetExplorer.Application","objIE_")
objIE.Visible = True
objIE.Navigate2 "http://www.google.com"
Do While objIE.Visible
WScript.Sleep 1000
Loop

Sub objIE_NavigateComplete2(pDisp, URL)
objIE.document.parentWindow.name = "_new"
End Sub

Sub objIE_FileDownload(ActiveDocument,Cancel)
if (objIE.Document.all.length > 0) then
objIE.document.parentWindow.name = "_new"
end if
End Sub

Sub objIE_OnQuit()
WScript.Quit
End Sub


вся инфа тута:

http://msdn.microsoft.com/workshop/browser/webbrowser/reflist_vb.asp

только там инфа для VB, синтаксис нужно менять для VBScript-а, т.к. микрозофтцы не удосужились написать справочник для Scripting Edition VB
К началу Профиль Сообщение Отправить e-mail
WRFan
Silver Member
Silver Member


Зарегистрирован: 26.07.2006
Сообщения: 141

СообщениеДобавлено: Сб, Фев 03 2007 19:56 Цитировать |  |  | 

я ещё решил прибить открытие новых окон через яваскрипт, особенно, если окно браузера открывается без полосок. получилось не очень красиво, и всё из за ограничений vbscript-а. в общем, я просто вырвал весь кусок яваскрипта:

Код:

[Patterns]
Name = "Kill Javascript initiated Windows"
Active = TRUE
Limit = 500
Match = ".open\(\1,*\)"
Replace = ".open(\1,"_new")"


вырываем все параметры и меняем таргет на название вспомогательного окна, можно конечно и _self. ну, как здесь описано:

http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/open_0.asp

надоело просто вырывать куски сорс кода, постоянно что то ломается. а ведь есть другой метод, более элегантный. можно стартануть ИЕ браузер как ActiveX Object и заставить его следить за событиями, если событие открытия нового окна происходит, его можно предупредить и вместо нового окна, открыть ссылку в текущем окне:

Код:

Sub objIE_NewWindow3(ppDisp, Cancel, dwFlags, bstrUrlContext, bstrUrl)
'dwFlags => 134=UserInitiated, 6=Click, 4=JavascriptInitiated
Cancel = true ' doesnt work
objIE.Navigate2 bstrUrl
'End Sub


info:

http://msdn.microsoft.com/workshop/browser/webbrowser/reference/events/newwindow3.asp

к сожалению, передача параметров объекту не срабатывает в VBScript-е, только в настоящем Visual Basic-е, потому что VBScript не поддерживает декларации типов данных. в VB это выглядит так:

ByRef Cancel As Boolean

ну а VBScript этого к сожалению не понимает. открытие нового окна он подмечает, но уже не может остановить
К началу Профиль Сообщение Отправить e-mail
Показать сообщения:      
 
Новая тема  Ответить

 Перейти:   




Следующая тема
Предыдущая тема
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


P o w e r e d b y p h p B B © p h p B B G r o u p :: T h e m e b a s e d o n FI T h e m e :: Часовой пояс: GMT + 3