Эпоха Web 2.0 характеризуется тем, что различные интернет-компании стремятся использовать веб-браузеры для привлечения пользователей и получения прибыли, предлагая свои собственные браузеры с различной функциональностью. Однако часто эти браузеры недостаточно оснащены полезными функциями, хотя их ядра могут быть одинаковыми, а API расширений несовместимыми. Поэтому одному полезному плагину требуется поддерживать несколько версий кода и установочных пакетов для различных популярных браузеров. . .
Поэтому если проблему можно решить с помощью стандартных HTML/CSS/JavaScript, мы можем использовать универсальный протокол javascript:
для создания кнопки закладки, которая будет выполнять нужные действия при каждом нажатии~
Если простое решение с использованием технологии bookmarklet становится недостаточным для удовлетворения новых требований, то исходный код этого проекта может служить основой для создания плагинов для разных версий браузеров (логика работы)~
【Примечание】Код всех установок в этом проекте сжат с помощью UglifyJS
## 【Очистка плавающих слоев сайта одним щелчком мыши】версия 0.5
Публикация статьи — https://log.fyscu.com/index.php/archives/118/
javascript: (function(a,b){function c(a,b){return [].slice.apply(a.getElementsByTagName(b))}function d(a,c){var d=a.currentStyle? a.currentStyle.getAttribute(c):b.defaultView.getComputedStyle(a,null).getPropertyValue(c),e=Number("0px"==d? 0:d); return isNaN(e)? d:e} function e(a,b){for(var c = 0 ; c < b.length ; c++) if(d(a,b[c][0]) == b[c][1]) return 1} function f(a,c,d){for(var e = 0 ; d > e ; e++) try { if(a.parentNode === c) return 1; if(a.parentNode === b) break; a = a.parentNode } catch(f){console.log(f)}} function g(c){ var g=e(c,[["display","none"],["visibility","hidden"],["width",0]]),h=!g&&e(c,[["position","absolute"],["position","fixed"]]); return h&&((a.FLC?!0:d(c,"z-index"))>100)?f(c,b.body,a.FLC?13:3):void 0} var k,i,j,h=c(c(b,"body")[0],"*"); for(i = 0 , j = 0 ; i < h.length ; i++) k=h[i],g(k)&&(k.parentNode.removeChild(k),console.log(k),j++); self.FLC|| (self.FLC=!0),alert([j," из этих чертовых плавающих рекламных слоев было удалено!~","\n","Вы можете попробовать ещё раз нажать на мою кнопку для более эффективной очистки."])},"\n\n","(C)2014 SCU FYclub-RDD").join(""));
Релиз заметки —— http://log.fyscu.com/index.php/archives/210/
1.При нажатии на кнопку в панели закладок будет использована Google Китайская Поиск. 2. Автоматически выбирается случайным образом один из лучших Google серверов за границей, пользователям не требуется использовать прокси для получения быстрого, стабильного и оригинального поиска. 3. Страница с результатами поиска открывается в новой вкладке, а конкретные страницы с результатами также открываются в новых вкладках, что не влияет на использование основной страницы. 4. По умолчанию производится поиск только по простым китайским веб-страницам, что позволяет избежать необходимости использования "инструмента продвинутого поиска" для отбора локализованных веб-страниц.
javascript: (function(BOM){
function Random_SN(a) {
return Math.floor(Math.random() * a.length)
}
function Probability_Random(a) {
var b;
void 0 === a.Random_SN && (a.Random_SN = -1);
do b = Random_SN(a);
while (b == a.Random_SN);
return a.Random_SN = b,
a[b]
}
function Sequence_Random(a) {
return a.splice(Random_SN(a),
1)[0]
}
Array.prototype.random = Array.prototype.random || function(a, b) {
return a ? b ? Sequence_Random(this) : (this.Random_Queue && this.Random_Queue.length || (this.Random_Queue = [].concat(this)), Sequence_Random(this.Random_Queue)) : Probability_Random(this)
};
String.prototype.trim = String.prototype.trim || function() {
return this.replace(/(^\s*)|(\s*$)/g, "")
};
BOM.getAllFrames = BOM.getAllFrames || function() {
var c, d, a = [], b = this.frames;
for (c = 0, d = 0; c < b.length; c++)
a[d++] = b[c],
b[c].frames.length && (a = a.concat(arguments.callee.call(b[c])));
return a
};
BOM
})();
``````javascript
eachFrame = BOM.eachFrame || function() {
var c, b, a = [this].concat(BOM.getAllFrames.call(this));
for (b = 0; b < a.length; b++) {
try {
if (c = arguments[0].call(a[b], a[b].document),
c === false) {
break;
}
if (typeof c !== 'undefined') {
return c;
}
} catch (d) {}
}
};
BOM.getSelectedText = BOM.getSelectedText || function() {
return BOM.eachFrame.call(this, function(_DOM_) {
var This_Tag = _DOM_.activeElement;
if (_DOM_.selection) {
return _DOM_.selection.createRange().text;
}
switch (This_Tag.tagName.toLowerCase()) {
case "input":
case "textarea":
with(This_Tag) {
return value.slice(selectionStart, selectionEnd);
}
default:
return _DOM_.getSelection().toString();
}
});
});
})(top), function(a, b, c) {
var d = a.getSelectedText().trim();
return d ? a.open(["http://", c.random(true), "/search?newwindow=1&lr=lang_", b, "&q=", a.encodeURIComponent(d)].join(""), "_blank") : a.confirm(["Вы не выбрали ни одного слова на странице... ", "«OK» перейдет в раздел обратной связи; «Отмена» завершит работу этого инструмента."]).showModal());
})();
```"].join("\n\n\n")) ? (a.prompt("Введите информацию о 'рабочей среде' в поле, нажмите 'ОК' для перехода на страницу автора ~", navigator.userAgent), a.open("http://www.fyscu.com/", "_blank")) : a.alert("【Google Китайский контекстный поиск v1.3】\n\n(C)2013-2016 Синьцзян Уйгурский автономный район · Флай Инжиниринг Клуб · Разработка");
``````javascript
})(top, "ru-RU", ["sssis.com", "www.90r.org", "booo.so", "g.ttlsa.com", "lamjoeone.info", "g.net.co", "iguge.tk", "jiong.lu", "xie.lu", "ggncr.com", "everthis.com", "ppx.pw", "gugesou.com", "soso.red", "521.pt", "google.sqzr.cc", "yue.pao.im", "da.pao.im", "g.xjliao.me", "gg.eeload.com", "repigu.com", "jinke.la", "glgoo.com", "googleforchina.com", "74.125.12.198", "209.116.186.219", "173.194.121.28", "g.hi18.cn"]);
## [Google Поиск внутри сайта] v1.4
**Публикация статьи** —— http://log.fyscu.com/index.php/archives/211/
### Основные характеристики
1. При клике на кнопку в закладках будет использоваться **Google** для **поиска внутри сайта**
2. Автоматически выбирается случайный лучший Google сервер за границей, что позволяет **пользователям получать быстрый, стабильный и оригинальный опыт поиска без использования прокси**
3. Результаты поиска открываются в новой вкладке, а конкретные результаты открыты в новых вкладках, что не влияет на использование основной веб-страницы
4. При повторном нажатии можно вернуться к поиску родительского домена
### Установка кода
```javascript
javascript:(function(BOM){function Random_SN(a){return Math.floor(Math.random()*a.length)}function Probability_Random(a){var b,void 0===a.Random_SN&&(a.Random_SN=-1);do b=Random_SN(a);while(b==a.Random_SN);return a.Random_SN=b,a[b]}function Sequence_Random(a){return a.splice(Random_SN(a),1)[0]}Array.prototype.random=Array.prototype.random||function(a,b){return a?b?Sequence_Random(this):(this.Random_Queue&&this.Random_Queue.length||(this.Random_Queue=[].concat(this)),Sequence_Random(this.Random_Queue)):Probability_Random(this)},String.prototype.trim=String.prototype.trim||function(){return this.replace(/(^\\s*)|(\\s*$)/g,"")},BOM.getAllFrames=BOM.getAllFrames||function(){var c,d,a=[],b=this.frames;c=0;d=0;c<b.length;
```## 【Обратный переход по URL】v0.1
### Опубликовано
— [http://bbs.fyscu.com/forum.php?mod=viewthread&tid=4685]
### Основные характеристики
1. Каждый раз при использовании этого инструмента браузер будет **переходить по пути текущего URL к более раннему сетевому ресурсу**
2. Некоторые новые сайты используют **перезапись URL** или **контроль маршрута**, что может привести к тому, что два соседних уровня URL будут указывать на один и тот же ресурс, и после обратного перехода вы снова окажетесь на том же URL...
3. Некоторые браузеры могут не позволять нормально выполнить обратный переход, когда страница недоступна (**страница не может быть отображена**) — потому что в адресной строке вместо оригинального URL будет отображен URL внутренней ошибки браузера~
### Установка кода
```javascript
javascript:(function(a){
var c,d,b=a.location.href.split("/");
if(!b[0].match(/^(http|https|file|ftp):$/))
return alert("Текущий URL не указывает на действительный сетевой ресурс, невозможно выполнить обратный переход...")||!1;
if(c=b.length,""===b[c-1]){
b.pop();
c--;
}
if(c>3)b.splice(-1,1);
else{
if("www."===b[2].slice(0,4))
return alert("Текущий URL уже находится на вершине сайта, дальнейший переход невозможен~");
d=b[2];
})
``````разделить(". "),d. splice(0,1),d. length<3&&d. splice(0,0,"www"),b[2]=d. join(". ")}a. location. href=b. join("/"))(top);
## 【веб-код встроенный】v0. 2
### Основные характеристики
1. Поддерживает **текстовые водяные знаки для изображений**, что удобно для **публикаций на форумах**, **редактирования статей в WeChat пабликах** (при использовании следующего инструмента для вставки HTML-кода)
2. Если на странице много больших изображений, время компиляции может увеличиться
3. В более старых версиях браузера могут возникнуть больше **встроенных стилей**
### Установка кода
javascript: (function(a,b){function c(a){return JSON. parse(JSON. stringify(a. ownerDocument. defaultView. getComputedStyle(a)))}function f(a){var f,b=e. contentWindow. document;return d[a]||(f=b. createElement(a),b. body. appendChild(f),d[a]=c(f),b. body. removeChild(f)),d[a]}function g(){var e,a={},b=c(arguments[0]),d=f(arguments[0]. tagName. toLowerCase());for(e in b)! isNaN(Number(e))||e. match(/^(\w+)/)||b[e]==d[e]||e. match(/width|height/i)||(a[e]=b[e]);return a}var d={},e=b. createElement("iframe");e. style. display="none",b. body. appendChild(e),a. CSS_Inline=function(){var b,a=g(arguments[0]);for(b in a)arguments[0]. style[b]=a[b]},a. Image_Inline=function(a,c){var f,d=new Image,e=b. createElement("canvas");d. crossOrigin="",f=e. getContext("2d"),d. onload=function(){e. width=d. width,e. height=d. height,f. drawImage(d,0,0),c&&(f. font="20px sans-serif",f. fillStyle="white",f. fillText(c,10,d. height-15)),a. src=e. toDataURL("image/png"),d=null},d. src=a. src},a. Web_Inline=function(){var b,a=arguments[0]. querySelectorAll("*");for(b=0;b<a. length;b++)switch(a[b]. tagName. toLowerCase()){case"meta":case"style":case"script":case"iframe":a[b]. parentNode. removeChild(a[b]);break;case"img":this. Image_Inline(a[b],arguments[1]);break;default:this. CSS_Inline(a[b])}return arguments[0]. innerHTML. trim()},a. Web_Inline(b. body,a. prompt("текст для водяного знака изображения:")),a. setTimeout(function(){b.
``````markdown
<body>.textContent = b.body.innerHTML, a.alert("Пожалуйста, выделите все отображаемое содержимое и скопируйте его!")}</code>, 1e3)}</code>)(self, self.document);
## 【инструмент вставки HTML-кода в редактор富文本编辑框 HTML 代码注入工具】v0.4
**发布博文** —— <http://my.oschina.net/TechQuery/blog/350954>
### 主要特性
1. 在没有 **HTML 代码编辑模式** 的富文本编辑器中点击一下,然后点击此工具的启动按钮,就可以将 **自定义的 HTML 代码** 构建的 **网页片段** 插入进去。
2. **自动检测当前焦点** 在编辑中的富文本编辑框(兼容 `<textarea />`、`<iframe />`、`<div />` 等可编辑容器)。
3. 如果用户跳过了输入代码,则无需再次点击该工具,只需在适当的位置插入代码即可。(此功能不适用于目标不同的情况或页面刷新的情况)。
4. 如果网站使用了 **富文本编辑器** 或服务器端程序过滤了一些 HTML 标签,则此工具将无法使用……
```### Установка кода
```javascript
javascript: (function(a) { var b = !!a.document.attachEvent, c = {"text": "text/plain", "url": "text/unicode", "html": "text/html"}, d = b ? ["attachEvent", "onpaste", "detachEvent"] : ["addEventListener", "paste", "removeEventListener"]; a.getPaste = a.getPaste || function(a, e) { var f = this; a = b ? a : c[a.toLowerCase()]; f.document[d[a ? 0 : 2]](d[1], function() { var c = arguments[0] || f; !1 === e.call(c.target || c.event.srcElement, c.clipboardData.getData(a)) && (b ? c.event.returnValue = !1 : c.preventDefault()); }, !1); }; a.getAllFrames = a.getAllFrames || function() { var c, d, a = [], b = this.frames; for (c = 0, d = 0; c < b.length; c++) a[d++] = b[c]; b[c].frames.length && (a = a.concat(arguments.callee.call(b[c]))); return a; }; a.eachFrame = a.eachFrame || function() { var d, c, b = [this].concat(a.getAllFrames.call(this)); for (c = 0; c < b.length; c++) try { if (d = arguments[0].call(b[c], b[c].document), d === !1) break; if (void 0 !== d) return d; } catch (e) {}; }; a.HTML_Inject = a.HTML_Inject || function(b) { var c = a.eachFrame(function(a) { var b = a.activeElement; if (!b) return !1; switch (b.tagName.toLowerCase()) { case "body": case "input": case "select": return; case "iframe": if (b.contentWindow.frames.length) return; b = b.contentWindow.document.body; } return b; }); return c ? (c.innerHTML = b || a.prompt("Введите HTML-код для вставки"), c.innerHTML || (c.iWatch || (a.getPaste.call(c.ownerDocument.defaultView, "Text", function(a) { return c.innerHTML = a, !1; }), c.iWatch = !0))) : void 0 : a.alert("Нет подходящей точки для вставки...\n\nПожалуйста, щелкните мышью в области редактирования, где вы хотите вставить код, затем снова нажмите на этот инструмент~"); })(self);
Опубликовать статью —— http://log.fyscu.com/index.php/archives/125/
2.Внешние CSS будут показывать относительный путь файла. Встроенные CSS будут отображать соответствующие им HTML элементы, что поможет в определении местоположения элементов в дереве DOM, показанном в отладчике. 4. Правила CSS медиазапросов и шрифты будут иметь отдельные ветви в отображаемых объектах. 5. В данный момент не поддерживаются случаи, когда в CSS селекторах присутствуют псевдоклассы и псевдоэлементы, за исключением тех, которые находятся в конце цепочки селекторов (это основной источник неточностей при сравнении с профессиональными инструментами). 6. Кросс-доменные CSS файлы не могут быть сканированы (они обычно являются CDN общими библиотеками или хранятся на серверах со статическими файлами в среде развертывания в виде сжатых версий, которые не предназначены для отладки).### Установка кода
javascript: (function(a,b,c){function f(a){return a.match(/^\w+:\/\//)&&(a=a.split("/").slice(3),a.unshift(". "),a=a.join("/")),a}function g(a){var b,d;for(a=a.split(","),b=[],d=0;d<a.length;d++)c(a[d].trim().split(":")[0]).length||b.push(a[d]);return b}function h(a){var b,e,f,i,h;try{b=a.cssRules||a.rules}catch(c){}if(e=[],f={media:a.media.mediaText,mediaRules:[],fontsRules:[]},b){for(h=0;h<b.length;h++)switch(i=b[h],i.type){case 1:i=g(i.selectorText),i.length&&e.push(i);break;case 4:f.mediaRules.push(arguments.callee(i)[0]);break;case 5:f.fontsRules.push({fontFamily:i.style.fontFamily,src:i.style.src})}f.WasteRate=(100*(e.length/h)).toFixed(2)+"%"}return[f,e]}var j,i,k,d=b.styleSheets,e="(C)2014-2015 test_32@fyscu.com";if(!c)return a.alert("Пожалуйста, запустите этот инструмент в IE 8+ (стандартном режиме) или современном веб-браузере.\n\n"+e),!1;if(!console)return a.alert("Пожалуйста, запустите этот инструмент с открытым окном консоли JavaScript.\n\n"+e),!1;for(i=0,k=[];i<d.length;i++)k[i]=h(d[i]),j=k[i].shift(),j.href=d[i].href,j.WasteRate&&j.href&&(j.href=f(j.href)),j.element=d[i].ownerNode,console.log(j);console.log(k)})(self,self.document,self.document.querySelectorAll);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )