<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JS, VBS: Пример создания скриптового плагина для Internet Explorer]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=1089</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1089&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JS, VBS: Пример создания скриптового плагина для Internet Explorer».]]></description>
		<lastBuildDate>Sat, 26 Jan 2008 13:41:01 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[JS, VBS: Пример создания скриптового плагина для Internet Explorer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=8365#p8365</link>
			<description><![CDATA[<p>Вызов данного скрипта встраивается в контекстное меню Internet Explorer,<br />что позволяет окрывать в всплывющем окне выделенный участок с произвольной веб-страницы.<br />Затем этот фрагмент кода можно быстро отредактировать, убрав лишние элементы офрмления, во встроенном в плагин редакторе.<br />После чего, сохранить полученный html текст в заданном каталоге.</p><p>В помощь утомленным создателям панелей <a href="http://myie.pp.ru/search">Поиска</a> и <a href="http://myie.pp.ru/res">Ресурсов</a> <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p><strong>Save Snippet for IE</strong><br />------------------</p><p>Наш вариант будет состоять аж из 4-х html файлов:<br /><strong>start.html</strong> (именно он вызывается из контекстного меню IE):</p><div class="codebox"><pre><code>&lt;script language=&quot;JavaScript&quot;&gt;

// Каталог для сохранения отрывков:
var SaveDir = &#039;C:\\Snippets&#039;;

// Извлекаем со страницы выделенный текст (если ничего не выделено, то весь)
var doc = external.menuArguments.document;
var sel=doc.selection.createRange().htmlText || doc.documentElement.innerHTML;
// Получаем URL страницы
var url=doc.URL;
// Получаем заголовок страницы
var docTitle=doc.title || &quot;none&quot;;
// используем его для создания имени файла для сохранения
var fileName = SaveDir + &#039;\\&#039; + docTitle.replace (/[^A-Za-zА-ё0-9. ]/g, &quot;-&quot;) + &#039;.html&#039;;

var textHTML = &#039;&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;&#039;;
textHTML += &#039;Save Snippet for IE v.3.1 beta&#039;;
textHTML += &#039;&lt;\/TITLE&gt;&lt;script language=&quot;JavaScript&quot;&gt;&#039;;
textHTML += &#039;var sel=opener.sel;&#039;;
textHTML += &#039;var url=opener.url;&#039;;
textHTML += &#039;var docTitle=opener.docTitle;&#039;;
textHTML += &#039;var fileName = opener.fileName;&#039;;
textHTML += &#039;&lt;\/script&gt;&lt;\/HEAD&gt;&#039;;
textHTML += &#039;&lt;FRAMESET rows=&quot;158,30%,*&quot; frameborder=1&gt;&#039;;
textHTML += &#039;&lt;FRAME src=&quot;_menu.html&quot; name=&quot;_menu&quot; noresize scrolling=&quot;no&quot; frameborder=0 marginheight=0 marginwidth=0 onLoad=&quot;_menu.PageTitle.value=docTitle; _menu.PageURL.value=url; _menu.filename.value=fileName; _menu.arrUndo[0].value=sel;&quot;&gt;&#039;;
textHTML += &#039;&lt;FRAME src=&quot;_form.html&quot; name=&quot;_form&quot; scrolling=&quot;auto&quot; frameborder=0 onLoad=&quot;_form.SaveSnippet.innerHTML=sel;&quot;&gt;&#039;;
textHTML += &#039;&lt;FRAME src=&quot;_source.html&quot; name=&quot;_source&quot; scrolling=&quot;no&quot; frameborder=1 onLoad=&quot;_source.HTMLtext.value=sel;&quot;&gt;&#039;;
textHTML += &#039;&lt;\/FRAMESET&gt;&lt;\/FRAMESET&gt;&lt;\/HTML&gt;&#039;;
// Открываем новое окно
var wind = window.open(&quot;&quot;, &quot;&quot;, &quot;toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes, resizable=yes, top=50, left=50, width=500, height=600&quot;);
// и пишем в него заготовленный код
wind.document.write(textHTML);

&lt;/script&gt;</code></pre></div><p>Из start.html открыватся 3 фрейма:<br /><strong>_menu.html</strong> (содержит код всех управляющих элементов):</p><div class="codebox"><pre><code>&lt;HTML&gt;&lt;HEAD&gt;&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=windows-1251&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;
body, td {font-family:MS Sans Serif; font-size:8px; background-color:threedface; margin:0; overflow:auto;}
input {font-family:MS Sans Serif; font-size:8px;}
b {color:#000099}
&lt;/style&gt;
&lt;script language=&quot;JavaScript&quot;&gt;
var last_tags=&#039;&#039;;

function SaveFile() {
    var FSO = new ActiveXObject(&#039;Scripting.FileSystemObject&#039;);
    var fileName = self.filename.value;
    var folderspec = fileName.replace(/[^\\]*?$/,&quot;&quot;);
    if (!FSO.FolderExists(folderspec)) {FSO.CreateFolder(folderspec)};
    if (FSO.FileExists(fileName)) {if (!((window.confirm(&quot;Файл с заданным именем уже существует!\nПереписать?&quot;)))) {return(0)};};
    var File = FSO.CreateTextFile(fileName, 2, false);
    s = parent._source.HTMLtext.value;
    url=self.PageURL.value;
    File.Write (&#039;&lt;!-- Saved from URL: &#039;+url+&#039; --&gt;\r\n&#039;+s);
    alert (&#039;Отрывок успешно сохранен!&#039;);
    parent.close();
}

function Undo(){
    var i=self.Index.value;
    var gi=self.gIndex.value;
    if (gi&gt;=0){
        i--;
        if (i&lt;0) {i=self.arrUndo.length-1;}
        parent._form.SaveSnippet.innerHTML=arrUndo[i].value;
        parent._source.HTMLtext.value=arrUndo[i].value;
        self.Index.value=i;
        self.gIndex.value--;
        if (gi==1){self.btnUndo.disabled=true;}
    }
}

function Change(newText){
    var i=self.Index.value;
    var imax=self.arrUndo.length-1;
    i++;
    if (i&gt;imax) {i=0;}
    self.arrUndo[i].value=newText;
    parent._form.SaveSnippet.innerHTML=newText;
    self.btnUndo.disabled=false;
    self.Index.value=i;
    if (self.gIndex.value&lt;imax) {self.gIndex.value++;}
}

function Edit(checked,tags) {
    if (checked){
        var s = parent._source.HTMLtext.value;
        if (tags==&#039;form&#039;){
            s = s.replace (/^[^°]*?(&lt;FORM [^°]*?&lt;\/FORM&gt;)[^°]*$/gi,&quot;$1&quot;);
        }
        else if (tags==&#039;table&#039;){
            s = s.replace (/&lt;[/]?TABLE.*?&gt;/gi,&#039;&#039;);
            s = s.replace (/&lt;[/]?TBODY.*?&gt;/gi,&#039;&#039;);
            s = s.replace (/&lt;[/]?TH.*?&gt;/gi,&#039;&#039;);
            s = s.replace (/&lt;[/]?TR.*?&gt;/gi,&#039;&#039;);
            s = s.replace (/&lt;[/]?TD.*?&gt;/gi,&#039;&#039;);
        }
        else if (tags==&#039;style&#039;){
            s = s.replace (/class=[^ \&quot;&gt;]+/gi,&#039;&#039;);
            s = s.replace (/style=[\&quot;][^\&quot;]+[\&quot;]/gi,&#039;&#039;);
            s = s.replace (/style=\S+? /gi,&#039;&#039;);
            s = s.replace (/ bgColor=[^ &gt;]+/gi,&#039;&#039;);
        }
        else if (tags==&#039;image&#039;){
            s = s.replace (/&lt;IMG [^&gt;]*( onClick=\&quot;.*[^\&quot;])+[^&gt;]*/gi,&#039;&lt;INPUT type=button value=&quot;Go!&quot; $1&#039;);
            s = s.replace (/&lt;IMG [^&gt;]*&gt;/gi,&#039; &#039;);
        }
        else if (tags==&#039;all&#039;){
            s = s.replace (/(&lt;[/]?SPAN.*?&gt;)|(&lt;[/]?DIV.*?&gt;)/gi,&#039;&#039;);
        }
        else if (tags==&#039;action&#039;){
            var tform = s.replace (/^[^°]*?(&lt;FORM [^°]*?&gt;)[^°]*$/gi,&quot;$1&quot;);
            var re = /action=[&quot;]?(http:\/\/)?([^ ]+)[&quot;]?/i;
            re.exec(tform);
            if (!RegExp.$1) {s = s.replace (re,&#039;action=&quot;&#039;+self.PageURL.value+&#039;-!-$2&quot;&#039;);}
            re = /target/i;
            if (!re.test(tform)) {s=s.replace (/(&lt;FORM [^&gt;]*)&gt;/i,&#039;$1 target=_blank&gt;&#039;);}
        }
        parent._source.HTMLtext.value=s;
        Change(s);
        last_tags=tags;
    }else{
        if (last_tags==tags) {Undo()}
    }
}

function fReplace(TextIn, TextOut){
    var s = parent._source.HTMLtext.value;
    var re = new RegExp(TextIn,&quot;gi&quot;);
    s = s.replace (re,TextOut);
    parent._source.HTMLtext.value=s;
    Change(s);
}
&lt;/script&gt;
&lt;/HEAD&gt;&lt;BODY bgcolor=threedface&gt;&lt;FIELDSET&gt;
        &lt;TABLE border=0 width=100% cellspacing=&quot;1&quot; cellpadding=&quot;0&quot; STYLE=&quot;font-family:&#039;MS Shell Dlg&#039;;&quot;&gt;
            &lt;TR&gt;&lt;TD align=right&gt;&lt;B&gt;Page:&amp;nbsp;&lt;/B&gt;&lt;TD colspan=2 width=100%&gt; &lt;input name=PageTitle style=&quot;width=100%&quot;&gt;
            &lt;TR&gt;&lt;TD align=right&gt;&lt;B&gt;URL:&amp;nbsp;&lt;/B&gt;&lt;TD colspan=2 width=100%&gt; &lt;input name=PageURL style=&quot;width=100%&quot;&gt;
            &lt;TR&gt;&lt;TD align=right&gt;&lt;B&gt;Filename:&amp;nbsp;&lt;/B&gt;&lt;TD width=100%&gt; &lt;input name=filename style=&quot;width=100%&quot;&gt;&lt;TD&gt; &lt;input type=button value=Save onClick=&quot;SaveFile()&quot;&gt;
            &lt;TR&gt;&lt;TD colspan=3&gt;&lt;TABLE border=0 width=100% cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; STYLE=&quot;margin:0;&quot;&gt;
                &lt;TR&gt;&lt;TD&gt;&lt;input type=checkbox onClick=&quot;Edit(this.checked,&#039;form&#039;)&quot;&gt;Только &amp;lt;FORM&amp;gt;-содержимое-&amp;lt;/FORM&amp;gt;
                &lt;TD&gt;&lt;input type=checkbox onClick=&quot;Edit(this.checked,&#039;image&#039;)&quot;&gt;Убрать картинки [img]
                &lt;TR&gt;&lt;TD style=&quot;white-space:nowrap;&quot;&gt;&lt;input type=checkbox onClick=&quot;Edit(this.checked,&#039;table&#039;)&quot;&gt;Убрать таблицы [TABLE,TBODY,TH,TR,TD]
                &lt;TD&gt;&lt;input type=checkbox onClick=&quot;Edit(this.checked,&#039;all&#039;)&quot;&gt;Убрать другие &quot;лишние&quot; теги [SPAN,DIV]
                &lt;TR&gt;&lt;TD&gt;&lt;input type=checkbox onClick=&quot;Edit(this.checked,&#039;style&#039;)&quot;&gt;Убрать стили [style,class,bgColor]
                &lt;TD&gt;&lt;input type=checkbox onClick=&quot;Edit(this.checked,&#039;action&#039;)&quot;&gt;Откорректировать запрос [FORM action]
            &lt;/TABLE&gt;
                &lt;TR&gt;&lt;TD colspan=3&gt;&lt;TABLE border=0 width=100% cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; STYLE=&quot;margin:0;&quot;&gt;
                    &lt;TR&gt;&lt;TD&gt;Заменить:&amp;nbsp;&lt;TD width=50%&gt;&lt;input type=text name=tFind style=&quot;width=100%&quot; title=&quot;Используйте регулярные выражения!&quot;&gt;&lt;TD&gt;&amp;nbsp;на:&amp;nbsp;&lt;TD width=50%&gt;&lt;input type=text name=tReplace style=&quot;width=100%&quot; title=&quot;Используйте регулярные выражения!&quot;&gt; &lt;TD&gt;&amp;nbsp;&lt;input type=button value=Replace onClick=&quot;fReplace(self.tFind.value, self.tReplace.value)&quot; title=&quot;По всему тексту
Без учета регистра&quot;&gt;&amp;nbsp;
                        &lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;input type=button value=Undo name=btnUndo onClick=&quot;Undo()&quot; DISABLED&gt;
                            &lt;input type=hidden name=gIndex value=0&gt;&lt;SELECT style=&quot;display:none&quot; NAME=&quot;arrUndo&quot;&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;option&gt;&lt;/SELECT&gt;&lt;input type=hidden name=Index value=0&gt;
                &lt;/TABLE&gt;
            &lt;/TABLE&gt;
        &lt;/TABLE&gt;&lt;/FIELDSET&gt;
&lt;/BODY&gt;&lt;/HTML&gt;</code></pre></div><p>Во фрейм <strong>_form.html</strong> попадает код фрагмента с веб-страницы (отображается как есть):</p><div class="codebox"><pre><code>&lt;HTML&gt;&lt;HEAD&gt;&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=windows-1251&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;
body, table {font-family:MS Sans Serif; font-size:8px; margin:0; overflow:auto;}
input, textarea {font-family:MS Sans Serif; font-size:8px;}
a {color:#000080; text-decoration:none;}
a:hover {color:red;}
&lt;/style&gt;
&lt;/HEAD&gt;&lt;BODY&gt;&lt;center&gt;
    &lt;TABLE border=0 height=100%&gt;&lt;TR&gt;&lt;TD valign=center&gt;
    &lt;TABLE bgcolor=#FFFFEE border=0&gt;&lt;TR&gt;&lt;TD&gt;
        &lt;div id=SaveSnippet&gt;&lt;h1&gt;none&lt;/h1&gt;&lt;/div&gt;
    &lt;/TABLE&gt;
    &lt;/TABLE&gt;
&lt;/center&gt;&lt;/BODY&gt;&lt;/HTML&gt;</code></pre></div><p>Во фрейм <strong>_source.html</strong> попадает код фрагмента с веб-страницы (отображается как html код):</p><div class="codebox"><pre><code>&lt;HTML&gt;&lt;HEAD&gt;&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=windows-1251&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;
body {margin:0; overflow:auto;}
textarea {font-size:8pt; font-family:verdana; width:100%; height:100%; overflow:auto;}
&lt;/style&gt;
&lt;script language=&quot;Javascript&quot;&gt;
function Change(newText){
    var i=parent._menu.Index.value;
    var imax=parent._menu.arrUndo.length-1;
    strUndo=parent._menu.arrUndo[i].value;
    if (newText!=strUndo){
        i++;
        if (i&gt;imax) {i=0;}
        parent._menu.arrUndo[i].value=newText;
        parent._form.SaveSnippet.innerHTML=newText;
        parent._menu.btnUndo.disabled=false;
        parent._menu.Index.value=i;
        if (parent._menu.gIndex.value&lt;imax) {parent._menu.gIndex.value++;;}
    }
}
&lt;/script&gt;
&lt;/HEAD&gt;&lt;BODY&gt;
&lt;TEXTAREA NAME=&quot;HTMLtext&quot; onMouseOut=&quot;Change(this.value)&quot; value=&quot;&quot;&gt;
&lt;/TEXTAREA&gt;
&lt;/BODY&gt;&lt;/HTML&gt;</code></pre></div><p>Еще один вспомогательный файл предназначен для быстрой установки и удаления регистрации плагина в Internet Explorer.<br />Изменив значения 2х переменных (<strong>plug_name</strong>, <strong>start_page</strong>) Вы сможете использовать его и для регистрации своих собственных плагинов.<br /><strong>Setup.vbs</strong>: </p><div class="codebox"><pre><code>&#039;  File:         Setup.vbs
&#039;  Description:  Install &amp; UnInstall plugin for IE
&#039;  Author:       mozers™  &lt;http://myie.pp.ru&gt;
&#039; _________________________________________________________

plug_name = &quot;Сохранить отрывок&quot;
start_page = &quot;start.html&quot;

Set WshShell = WScript.CreateObject(&quot;WScript.Shell&quot;)
Set FSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
reg_path = &quot;HKCU\Software\Microsoft\Internet Explorer\MenuExt\&quot; &amp; plug_name &amp; &quot;\&quot;

installHead = &quot;Установка &quot;&quot;&quot; &amp; plug_name &amp; &quot;&quot;&quot;&quot;
installText = &quot;Вы хотите установить &quot;&quot;&quot; &amp; plug_name &amp; &quot;&quot;&quot;?&quot;
installFinish = &quot;&quot;&quot;&quot; &amp; plug_name &amp; &quot;&quot;&quot; успешно установлен!&quot; &amp; vbNewLine &amp; &quot;Вызов - через контекстное меню Internet Explorer.&quot;

errorHead = &quot;Ошибка установки&quot;
errorText = &quot;Запустите Setup.vbs из каталога с файлами плагина!&quot;

uninstallHead = &quot;Удаление &quot;&quot;&quot; &amp; plug_name &amp; &quot;&quot;&quot;&quot;
uninstallText = &quot;&quot;&quot;&quot; &amp; plug_name &amp; &quot;&quot;&quot; у Вас уже установлен&quot; &amp; vbNewLine &amp; &quot;Вы хотите его удалить?&quot;
uninstallFinish = &quot;Регистрация &quot;&quot;&quot; &amp; plug_name &amp; &quot;&quot;&quot; удалена из системы :(&quot;

If RegExistKey (reg_path) Then
    If MsgBox(uninstallText, vbOKCancel + vbInformation, uninstallHead) = vbCancel Then WScript.Quit
    &#039; Удаление пункта из контекстного меню IE
    WSHShell.RegDelete reg_path
    MsgBox uninstallFinish, vbInformation, uninstallHead
Else
    If MsgBox(installText, vbOKCancel + vbInformation, installHead) = vbCancel Then WScript.Quit
    if Not FSO.FileExists(start_page) then MsgBox errorText, vbExclamation, errorHead : WScript.Quit
    &#039; Добавление пункта в контекстное меню IE
    Set regEx = New RegExp
    regEx.Pattern = &quot;(^.+\\).+&quot;
    start_page = regEx.Replace(WScript.ScriptfullName, &quot;$1&quot;) &amp; start_page
    WSHShell.RegWrite reg_path, start_page
    WSHShell.RegWrite reg_path &amp; &quot;Contexts&quot;, &quot;59&quot;, &quot;REG_DWORD&quot;

    &#039; Разрешать запуск активного содержимого файлов на моем копьютере (Разрешено)
    WSHShell.RegWrite &quot;HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_LOCALMACHINE_LOCKDOWN\iexplore.exe&quot;, &quot;0&quot;, &quot;REG_DWORD&quot;
    &#039; Использование элементов ActiveX, не подписанных как безопасные (Спросить)
    WSHShell.RegWrite &quot;HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1201&quot;, &quot;1&quot;, &quot;REG_DWORD&quot;

    MsgBox installFinish, vbInformation, installHead
End If
WScript.Quit

Function RegExistKey (key)
    Dim bExistKey
    bExistKey = False
    On Error Resume Next
    WSHShell.RegRead key
    If Err.Number = 0 Then bExistKey = True
    On Error GoTo 0
    RegExistKey = bExistKey
End Function</code></pre></div><p><strong>Установка</strong>:<br />----------<br />После того, когда Вы сохраните представленный код под заданными именами, запустите <strong>Setup.vbs</strong></p><p><strong>Настройка</strong>:<br />----------<br />Исправьте на Ваш каталог по умолчанию для сохранения отрывков в файле <strong>start.html</strong></p><p><strong>Удаление</strong>:<br />----------<br />Запустите <strong>Setup.vbs</strong></p><p><strong>Замечания</strong>:<br />----------<br />Beta - это потому, что у меня нет абсолютной уверенности в 100% правильной работе кнопочек<br />для быстрого редактирования текста. Так что - посматривайте...<br />Если что - жмите Undo <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Код наверняка можно доработать и оптимизировать. Сообщите, pls, если улучшите...</p><p>=============================================================</p><p>Дабы столь навороченная конструкция не отпугнула начинающих скриптописателей от сочинения собственных плагинов, выложу еще один, сильно упрощенный вариант.<br />Возможностей у него практически никаких. Так что использовать его можно только в качестве примера.<br />Вместо 4х файлов - один <strong>start.html</strong></p><div class="codebox"><pre><code>&lt;script language=&quot;JavaScript&quot;&gt;
// открываем новое пустое окно
var wind = window.open(&quot;&quot;, &quot;&quot;, &quot;toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes, resizable=yes, top=50, left=50, width=500, height=600&quot;);
// создаем в этом окне TEXTAREA
wind.document.write(&#039;&lt;TEXTAREA NAME=&quot;HTMLtext&quot; style=&quot;width=100%; height=100%&quot;&gt;&#039;);
// загоняем в TEXTAREA выделенный на странице текст
wind.HTMLtext.value=external.menuArguments.document.selection.createRange().htmlText;
&lt;/script&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Sat, 26 Jan 2008 13:41:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=8365#p8365</guid>
		</item>
	</channel>
</rss>
