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

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

№126-07-2007 20:09:28

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Запуск JavaScript из закладок

Хоть это и не совсем (а совсем не ;)) разработка... (Хотя... :D)

Известно, что, помимо прямого назначения, из закладок можно еще и скрипты запускать.
Короче говоря, мне интересно, кто чего полезного добился на этом поприще =)


А вот, что удалось мне.

BBCode
Если есть выделение на странице, происходит быстрая вставка выделенного текста с тэгами в последнюю <textarea> и переход к этой <textarea>.
Если выделения на страницы нет, берется выделенный текст из последней <textarea> и обрамляется тэгами (результат выделяется).

Выделить код

Код:

var to = '[quote]';
var tc = '[/quote]
';
var tas = window.document.getElementsByTagName('textarea');
var tal = tas.length;
if(tal == 0)
	alert('Textarea not found!');
else {
	var ta = tas[tal - 1];
	var sel = window.getSelection();
	if(sel != '') {
		ta.value += to + sel + tc + '\n';
		ta.scrollTop = ta.scrollHeight;
	}
	else {
		var startPos = ta.selectionStart;
		var endPos = ta.selectionEnd;
		var oPosition = ta.scrollTop;
		var oHeight = ta.scrollHeight;
		var subst = to + ta.value.substring(startPos, endPos) + tc;
		ta.value = ta.value.substring(0, startPos) + subst + ta.value.substring(endPos, ta.value.length);
		ta.selectionStart = startPos;
		ta.selectionEnd = startPos + subst.length;
		var nHeight = ta.scrollHeight - oHeight;
		ta.scrollTop = oPosition + nHeight;
	}
	ta.focus();
}

Хм, глюк какой-то... Должно быть
var to = '[quоte]';
var tc = '[/quоte]';
вот только никак не исправить (сейчас буквы «о» – русские)...

Код для закладки (должна быть только одна строка):

Выделить код

Код:

javascript:var to='[quote]';var tc='[/quote]
';var tas=window.document.getElementsByTagName('textarea');var tal=tas.length;if(tal==0)alert('Textarea not found!');else{var ta=tas[tal-1];var sel=window.getSelection();if(sel!=''){ta.value += to+sel+tc+'\n';ta.scrollTop=ta.scrollHeight;}else{var startPos=ta.selectionStart;var endPos=ta.selectionEnd;var oPosition=ta.scrollTop;var oHeight=ta.scrollHeight;var subst=to+ta.value.substring(startPos,endPos)+tc;ta.value=ta.value.substring(0,startPos)+subst+ta.value.substring(endPos,ta.value.length);ta.selectionStart=startPos;ta.selectionEnd=startPos+subst.length;var nHeight=ta.scrollHeight-oHeight;ta.scrollTop=oPosition+nHeight;}ta.focus();}

И, разумеется, можно задать любые to и tc =)
var to='[В]';var tc='[/В]';

И можно ли вообще воспользоваться чем-то вроде document.commandDispatcher.focusedElement (как можно сделать из chrome://)?

Изменение размера окна (увы, не работает при запрете для JavaScript соответствующего действия)
1. Окно «сгоняется» вниз.

Выделить код

Код:

javascript:y=0.61;Y=screen.height;window.resizeTo(screen.width,Math.round(Y*y));window.screenX=0;window.screenY=Math.round(Y*(1-y));

y=0.61 – доля экрана, которая будет занята окном.

2. Просто ресайз до x*y.

Выделить код

Код:

javascript:x=800;y=600;X=screen.width;Y=screen.height;if(X<=x)x=X;if(Y<=y)y=Y;window.resizeTo(x,y);window.screenX=0;window.screenY=Y-y;

Но есть существенный недостаток: текущая вкладка будет замещена результатами выполнения скрипта... Если только не загрузить закладку в боковую панель (неудобно – даже с AiOS и самозакрытием сайдбара) или добавить что-то вроде window.select(); (что вернет ошибку в консоль, но сохранит содержимое вкладки, но это как-то «некультурно»).
Так вот, как в общем случае сохранить содержимое вкладки?

Исходный код в текущей вкладке:

Выделить код

Код:

javascript:location.href='view-source:'+location.href;

P. S. Никто никогда не пытался сделать закладку для перехода к следующей ссылке (...01.jpg -> ...02.jpg)? А то у меня в свое время ничего полезного не вышло... С механизмом все просто:
var cl = location.href; ... /* из cl получаем новую ссылку nl */ ... location.href = nl;
А вот реализация у меня не пошла.

Отредактировано Infocatcher (26-07-2007 20:23:32)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№226-07-2007 21:16:35

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

Re: Запуск JavaScript из закладок

как в общем случае сохранить содержимое вкладки?

последнее выражение передавать в void, например для ресайза:
javascript:x=800;y=600;X=screen.width;Y=screen.height;if(X<=x)x=X;if(Y<=y)y=Y;window.resizeTo(x,y);window.screenX=0;void(window.screenY=Y-y);


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

Отсутствует

 

№326-07-2007 23:35:31

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: Запуск JavaScript из закладок

Anton пишет

последнее выражение передавать в void

О, так гораздо лучше. Спасибо!


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№427-07-2007 17:17:41

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: Запуск JavaScript из закладок

сделать закладку для перехода к следующей ссылке (...01.jpg -> ...02.jpg)?

Некоторые наработки:

Выделить код

Код:

var cl = location.href;
var exti = cl.lastIndexOf('.');
var ext = cl.substring(exti, cl.length);
if(ext.match(/^\.[a-z0-9]+$/i)) {
	var fni = cl.lastIndexOf('/') + 1;
	var fn = cl.substring(fni, exti);

	var fnst = fn.replace(/\d+$/, '');
	var cn = fn.substring(fnst.length, fn.length);

	var z = n.replace(/^0*/, '').length;

	var n = ; /* получить из строки cn число */

	var nn = n + 1;

	var add = n.toString().length < nn.toString().length /* 9 -> 10 */
		? ""
		: "0";

	for(var i = 1; i <= z; i++)
		add += "0";

	var nl = cl.substring(0, fni) + fnst + add + nn + ext;
	alert(nl);

/* location.href=nl; */
}
else
	alert('Invalid extension:\n' + ext);

Вопрос. Как преобразовать строку в число (var s = "01" -> var n = 1)?


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№527-07-2007 17:51:45

Infant
   «»
 
Группа: Extensions
Откуда: Одесса
Зарегистрирован: 23-12-2004
Сообщений: 3671
UA: Minefield 3.0

Re: Запуск JavaScript из закладок

Q: Как преобразовать строку в число (в моей форме пользователь
вводит числовое значение в одно из текстовых полей, но ведь это
строка, а мне в цикле нужно число)?

   A: Метод parseInt:
   var stringInt="25";
   parseInt(stringInt) - получившееся число, то есть 25.


Благодарю алфавит за любезно предоставленные буквы.

Отсутствует

 

№627-07-2007 17:59:29

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508
UA: Shiira 2.2

Re: Запуск JavaScript из закладок

Infocatcher
Самый простой и универсальный способ - умножить на единицу или вычесть ноль.

Добавлено Птн 27 Июл 2007 18:00:20 :
P.S. Или parseInt - тоже хороший способ.

Отсутствует

 

№727-07-2007 21:25:39

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: Запуск JavaScript из закладок

Infant
Спасибо!

Al_H
А ведь я даже когда-то (когда раньше пробовал закладку такую соорудить) так делал... Но метод как-то смущал...


Надеюсь, всё учел...
Если заканчивается не на .<буквоцифры>, то выскочит alert.

Уменьшение:

Выделить код

Код:

javascript:var cl=location.href;var exti=cl.lastIndexOf('.');var ext=cl.substring(exti,cl.length);if(ext.match(/^\.[a-z0-9]+$/i)){var fni=cl.lastIndexOf('/')+1;var fn=cl.substring(fni,exti);var fnst=fn.replace(/\d+$/,'');var cn=fn.substring(fnst.length,fn.length);var cnx=cn.match(/^0+$/)?'0':cn.replace(/^0*/,'');var z=cn.length-cnx.length;var n=parseInt(cnx);var nn=n-1;if(nn<0)alert(nn);else{if(n.toString().length>nn.toString().length)z++;var add='';for(var i=1;i<=z;i++)add+='0';var nl=cl.substring(0,fni)+fnst+add+nn+ext;location.href=nl;}}else alert('Invalid extension:\n'+ext);

Увеличение:

Выделить код

Код:

javascript:var cl=location.href;var exti=cl.lastIndexOf('.');var ext=cl.substring(exti,cl.length);if(ext.match(/^\.[a-z0-9]+$/i)){var fni=cl.lastIndexOf('/')+1;var fn=cl.substring(fni,exti);var fnst=fn.replace(/\d+$/,'');var cn=fn.substring(fnst.length,fn.length);var cnx=cn.match(/^0+$/)?'0':cn.replace(/^0*/,'');var z=cn.length-cnx.length;var n=parseInt(cnx);var nn=n+1;if(n.toString().length<nn.toString().length)z--;var add='';for(var i=1;i<=z;i++)add+='0';var nl=cl.substring(0,fni)+fnst+add+nn+ext;location.href=nl;}else alert('Invalid extension:\n'+ext);

Код в нормальном виде:
http://pastebin.mozilla-russia.org/89787

Только из about:neterror нельзя будет вернуться :(...
В консоли пишет:

Выделить код

Код:

Ошибка системы безопасности: содержимое about:neterror?e=fileNotFound&u=file%3A///J%3A/<...>/04.htm. не имеет права загружать file:///J:/<...>/05.htm или ссылаться на него.

Отредактировано Infocatcher (27-07-2007 21:27:42)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№828-07-2007 08:00:06

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785

Re: Запуск JavaScript из закладок

Infocatcher пишет

Код в нормальном виде:
http://pastebin.mozilla-russia.org/89787

ужас какой, имхо очень громоздко получилось
я бы переписал это так ;)

Отсутствует

 

№928-07-2007 11:08:19

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785

Re: Запуск JavaScript из закладок

посидел тут немного, подумал...
надумал расширение Location Increment 0.1, которое делает именно то, что в примере выше, по нажатию альт+плюс и альт+минус
имхо юзефул ;)

Отсутствует

 

№1028-07-2007 13:20:20

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 2.0

Re: Запуск JavaScript из закладок

shutnik пишет

я бы переписал это так

Зато у меня после 001.jpg будет 002.jpg ;)
К тому же, куда интересней без всяких расширений – закладки ведь работают в IE7 и Opera (проверил, впрочем, сомнения были по большей части только относительно IE).


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1128-05-2008 03:28:23

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.0

Re: Запуск JavaScript из закладок

Решил сделать новую версию скрипта для изменения числовой части ссылок (http://example.com/dir/abc01.jpg => http://example.com/dir/abc02.jpg) =)

Выделить код

Код:

(function() {
var inc = true; // true => ++, false => --
var loc = location.href;
var m = loc.match(/^(.*\D)(\d+)(\D*)$/);
if(!m) {
	alert("Here was no numbers:\n" + loc);
	return;
}
var urlStart = m[1];
var orgNum = m[2];
var urlEnd = m[3];
m = orgNum.match(/(0*)(\d+)/);
var zeros = m[1];
var num = parseInt(m[2]);
var newNum = inc ? ++num : --num;
if(newNum == -1) {
    alert(loc + "\nNext is -1");
    return;
}
newNum = zeros + newNum;
if(zeros && newNum.length > orgNum.length)
	newNum = newNum.substr(1);
else if(newNum.length < orgNum.length)
	newNum = "0" + newNum;
location.href = urlStart + newNum + urlEnd;
})();

Код для закладки (++):

Выделить код

Код:

javascript: (function() { var inc = true; var loc = location.href; var m = loc.match(/^(.*\D)(\d+)(\D*)$/); if(!m) { alert("Here was no numbers:\n" + loc); return; } var urlStart = m[1]; var orgNum = m[2]; var urlEnd = m[3]; m = orgNum.match(/(0*)(\d+)/); var zeros = m[1]; var num = parseInt(m[2]); var newNum = inc ? ++num : --num; if(newNum == -1) { alert(loc + "\nNext is -1"); return; } newNum = zeros + newNum; if(zeros && newNum.length > orgNum.length) newNum = newNum.substr(1); else if(newNum.length < orgNum.length) newNum = "0" + newNum; location.href = urlStart + newNum + urlEnd; })();

Код для закладки (--):

Выделить код

Код:

javascript: (function() { var inc = false; var loc = location.href; var m = loc.match(/^(.*\D)(\d+)(\D*)$/); if(!m) { alert("Here was no numbers:\n" + loc); return; } var urlStart = m[1]; var orgNum = m[2]; var urlEnd = m[3]; m = orgNum.match(/(0*)(\d+)/); var zeros = m[1]; var num = parseInt(m[2]); var newNum = inc ? ++num : --num; if(newNum == -1) { alert(loc + "\nNext is -1"); return; } newNum = zeros + newNum; if(zeros && newNum.length > orgNum.length) newNum = newNum.substr(1); else if(newNum.length < orgNum.length) newNum = "0" + newNum; location.href = urlStart + newNum + urlEnd; })();

P.S. Чтобы не потерялось... Сделать весь текст на странице полужирным и получить все ссылки со страницы.

Отредактировано Infocatcher (28-05-2008 03:35:38)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1228-05-2008 17:20:05

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Iceweasel 2.0

Re: Запуск JavaScript из закладок

http://www.squarefree.com/pornzilla/

Отсутствует

 

Board footer

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