1

Тема: HTML (in IE)/JS: Копирование выделения на страницк как "plain text"

Сделал для облегчения "копи-паста" со страниц IE содержимого выделения в текстовом виде (без форматирования) короткий скрипт, который вызывается из контекстного меню IE мои дополнительным пунктом "Copy (as plain text;)".

Скрипт для инсталл/деинсталла пункта в меню:


' IE_copyAsText_setup.vbs
' ----------------------------------------------------------------------------------------
' Добавляет/Удаляет в контекстное меню Internet Explorer пункт "Copy (as plain text;)"
' ----------------------------------------------------------------------------------------

Dim sMenu, REG_MENUEXT, rc
'--- имя добавляемого пункта
sMenu = "Copy (as plain text;)" 'имя добавляемого пункта

REG_MENUEXT = "HKCU\Software\Microsoft\Internet Explorer\MenuExt\" ' путь к меню Internet Explorer в реестре

Set WshShell = WScript.CreateObject("WScript.Shell")
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")

'--- проверка наличия в IE нашего пункта'
If uf_keyExists( REG_MENUEXT & sMenu & "\" ) Then 
	'--- менюшка уже есть, предлагаем удалить'
	rc=MsgBox("Удалять из меню Internet Explorer данный пункт ?" & vbCrLf , vbQuestion + vbOKCancel, sMenu)
	If rc=vbOK Then
		WshShell.RegDelete( REG_MENUEXT & sMenu & "\" )
		MsgBox "Удаление выполнено." & vbCrLf &_
			"Перезапустите Internet Explorer, чтобы изменения вступили в силу" & vbCrLf & vbCrLf, _
			vbInformation, "Удаление в IE меню """ & sMenu & """"
	End IF
else '--- пункта меню нет, предлагаем установить'
	rc = MsgBox("Хотите добавить в контекстное меню Internet Explorer пункт """ & sMenu & """" & vbCrLf & vbCrLf & _
		"для возможности копирования в IE выделения как простого текста (plain text) ?" & vbCrLf & vbCrLf, _
		vbYesNo OR vbQuestion, "Установка """ & sMenu & """")
	If rc=vbYes Then
		Dim sPathApp, sPathHTM, REG_NEWMENU
		sPathApp = fso.GetAbsolutePathName(".") 'путь к каталогу запуска задачи'
		sPathHTM = sPathApp & "\IE_copyAsText.htm" 'путь к программе добавления ссылок'''''''''''''''''''''''''''''''''
		' Записываем в реестр требуемые значения
		REG_NEWMENU = REG_MENUEXT & sMenu & "\"
		WshShell.RegWrite REG_NEWMENU, sPathHTM, "REG_SZ"
		WshShell.RegWrite REG_NEWMENU & "Contexts", 8+16+32, "REG_DWORD" 'Таблица 0x8 + Выделенный текст 0x10 + Ссылка 0x20'
		WshShell.RegWrite REG_NEWMENU & "Flags",    1, "REG_DWORD"
		MsgBox "Данные были успешно внесены," & vbCrLf & _
			"путь к программе прописан следующий - """&sPathHTM&"""." & vbCrLf & vbCrLf & _
			"Перезапустите Internet Explorer, чтобы изменения вступили в силу, " &_
			"добавленный пункт будет отображаться в контекстном меню." & vbCrLf &vbCrLf,_
			vbInformation, sMenu
	End IF
End If

Set FSO = Nothing
Set WshShell = Nothing


'--- проверка наличия ключа реестра'
Function uf_keyExists(key)
  Dim key2    
  On Error Resume Next
  key2 = WshShell.RegRead(key)
  If Err <> 0 Then
    uf_keyExists = False
  Else
    uf_keyExists = True
  End If
  On Error GoTo 0
End Function

Код страницы со скриптом:


<!-- IE_copyAsText.htm
Данная страничка выполняет копирование в clipboard выделенного на странице содержимого как простого текста.

Меню вызова этой страницы настраивается запуском скрипта - "IE_copyAsText_setup.vbs". 
-->

<html style="width: 300px; height: 160px; margin: 1px; status:1">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta name="Author" content="Roman.Gerashchenko@otpbank.com.ua">
<meta name="Description" content="Copy selected content in IE as plain text">

<head>
<title>as plain text</title>
</head>

<!-- ========================================= HTML ===========================================  -->

<BODY BGCOLOR="#C0C0C0" onload="Window_OnLoad();">
<div align="center">
<TEXTAREA id=ta_textResult rows=5 cols=40
	style="font-size: 10;">
</TEXTAREA>

</div>
<br><br>
<hr><small>
<i>&nbsp;IE_copyAsText.htm v1.0 by 05.09.2012 &nbsp;&copy; R.G.</i></small>
<!-- ====================================== VBScript ==========================================  -->
<script language="VBScript">

'/-/-/-/-/-/-/-/-/-/ Вспом. функции - для вызова из JScript некоторых возможностей VBScript /-/-/-/-/-/-/'
Function vb_Trim (ps)
	vb_Trim = RTrim( LTrim(ps) ) 'почему-то одной функции Trim() не достаточно!:(' 
End Function 


</script>

<!-- =================================== JScript ==============================================  -->
<script language="JavaScript">

// отрабатывает при открытии окна - получение значений из "вызвавшей" страницы
function Window_OnLoad()
{
	var parentwin = external.menuArguments;     // получаем объект окна
	var doc = parentwin.document;               // получаем объект документа
	
	
	var sel = "";
	sel = doc.selection.createRange().text; // получаем текст выделения
	sel = vb_Trim( sel ); // отсекаем лидирующие и конечные пробелы
	
	if (sel=="") alert("На странице не было выделения непустого текстового содержимого"); else {
		document.all.ta_textResult.value = sel; // вставляем полученный текст в объект TEXTAREA
		ta_textResult.createTextRange().execCommand("Copy"); //копируем в clipboard
	}
	
	 // alert("Close");
	window.close();
}

</script>
</body>
</html>

Можно скачать mp4-клип - "мануал" https://code.google.com/p/small-scripts … n=2&q=

WBR. Roman

2

Re: HTML (in IE)/JS: Копирование выделения на страницк как "plain text"

для работы с буфером лучше всего подходит флеш (к слову)

Я конечно далек от мысли... (с)

3

Re: HTML (in IE)/JS: Копирование выделения на страницк как "plain text"

Rom5 пишет:
vb_Trim = RTrim( LTrim(ps) ) 'почему-то одной функции Trim() не достаточно!:('

Мне хватало: VBScript: сохранить выделенный в Internet Explorer текст в файл .