Chrome拡張機能「S.G.T.C. ~Send "Generated Text By UserScript" to Clipboard.~」
About
"S.G.T.C." is an extension for Chrome. It can send text generated with a "UserScript" to the clipboard.
Based on the information on the page,
- Create Links
- Get a list of Image URLs
- Get a list of Links
- Generate quoted text based on mouse-selected text
- Get any information on a page with Web scraping
etc.
On the user side, more functionality can be added by writing "UserScript".
Install
- Go to the S.G.T.C. page on the Chrome Web Store.
- Click Add to Chrome.
- When you click, a confirmation dialog for installation will appear, so click the Add extension button.
- Installation complete.
How to use
To use the extension
Click on the icon on the right side of the address bar or the name of the script you wish to run from the context menu.
To use on local file
If you want to run "S.G.T.C." on local files as well,
- From the icon in the top right of Google Chrome, go to the screen with the list of installed extensions by selecting "Extension → Manage Extension".
- Click the Detail button for "S.G.T.C" to go to the management screen.
- enable the "Allow access to file URLs" option.
Setting
To open the Option of “S.G.T.C.”,
- Click the icon on the right side of the address bar to display a pop-up menu.
- Click the gear icon at the top of the pop-up menu to display the options screen.
Changes to settings, additions or modifications to user scripts, and changes to the default settings by resetting will not be reflected until you press the save button. Please be especially careful not to forget to save when adding or modifying user script code.
Debug
Developer Tools の Console への出力有効/無効切り替えについて。このオプションを有効にすると、処理が若干(100~300ms)遅くなる為、
- 処理の過程を見たい
- “UserScript” のデバックを行いたい
等を除き、基本的にこのオプションを有効にする必要はありません。
ユーザースクリプトのデバックの詳細については、UserScript の Debug の項を参照してください。
UserScript
Specification
- 動作環境について
- 言語は JavaScript
- 使用可能な API はインストールされたブラウザのバージョンに準ずる
- 実行環境について
- background(service workers) 上で chrome.offscreen を使用して生成されたドキュメントの iframe sandbox 内で実行
- Code Type
- script と library の二種類。ユーザースクリプトのエディタ画面で指定
- script
- いわゆるメイン関数に相当、返り値は必ず文字列で
- library
- 他のユーザースクリプトと共用したい変数・関数を記述する際に指定
- script の上の Scope に挿入される為、他の library との変数・関数名の重複に注意
- 有効にした library は、その使用に関わらず全て読み込まれる為、ファイルサイズが大きい場合、処理速度に影響が
- script
- script と library の二種類。ユーザースクリプトのエディタ画面で指定
Restriction
- 以下のURLでは取得可能なプロパティが title と url のみに制限されます。
- chrome:// や vivaldi:// から始まるブラウザ内部URL
- chrome-extension:// から始まる拡張機能の内部URL
- Chrome Web Store
- セキュリティ対策として UserScript 実行環境での通信APIを原則不可に。
- XMLHttpRequest
- fetch
- UserScript での 同期非同期について
- 現時点では未対応。 Ver 1.0 までには実装予定
- Document 要素の扱いについて
- 該当ページ上では無く chrome.offscreen 内の iframe 上でユーザースクリプトを実行している為、該当ページの HTMLDocument は触れません。DOMParser: parseFromString() method を使い、該当ページ相当の HTMLDocument を生成してください。
- 処理全体の流れは Sample Code を参照
- Anchor or IMG 要素について
- 上記でも説明したように、OffscreenDocument 内の Sandbox 環境でユーザースクリプトを実行している為、通常の
elm.src
orelm.href
等で絶対URLを取得できません。一旦、getAttribute() method で属性値を文字列として取得し、URL() constructor 経由で 絶対URL に変換してください - 具体的な処理は Sample Code を参照
- 上記でも説明したように、OffscreenDocument 内の Sandbox 環境でユーザースクリプトを実行している為、通常の
Debug
実行環境である OffscreenDocument はユーザースクリプト実行終了後に短時間で閉じる為、ビューを検証からのデバックは推奨しません。Debug 有効時、ユーザースクリプトのコンソール出力は background(service workers) へと非同期で送信しているので、そちらを参照してください。
Argument
argument, detail of reserved
property | type | description |
---|---|---|
title | string | The page Title. taken from the document.title of the page. |
url | string | The page url. taken from the document.URL of the page. |
content | string | HTML content of current page. taken from the document.documentElement.outerHTML of the page. |
referrer | string | The website visited before current page. taken from the document.referrer of the page. |
selection | object | See separate detail of selection. |
key | object | See separate key of selection. |
argument, detail of selection
マウス等でテキスト選択状態にある場合に取得。現在のページ、もしくは同じドメインから読み込まれた frame や iframe のページから取得。
property | type | description |
---|---|---|
title | string | The page title that have been selected with the mouse. taken from the document.title of the current page. |
url | string | The page url that have been selected with the mouse. taken from the document.URL of the current page. |
content | string | HTML content of current page that have been selected with the mouse. taken from the document.documentElement.outerHTML of the current page. |
referrer | string | The website visited before current page. taken from the document.referrer of the current page. |
sameorigin | bool | The frame or iframe selected with the mouse is from the same domain as the current page. | |
selected | bool | Is it selected in a frame or iframe on the same domain? |
selectionText | string | The Text of the Selected Content on the page. taken from the window.getSelection().toString() of the active page. |
selectionHTML | string | The HTML of the Selected Content on the page. taken from the document.documentElement.outerHTML of the active page. |
argument, detail of key
キーボードの入力状態を取得。いずれかのキーを離したタイミングでリセットされる為、キーボードを押した状態で実行を。
property | type | description |
---|---|---|
type | string | Returns the string "keydown" on key down. |
altKey | bool | A boolean value indicating whether the Alt key is pressed. |
ctrlKey | bool | A boolean value indicating whether the Ctl key is pressed. |
shiftKey | bool | A boolean value indicating whether the Shift key is pressed. |
metaKey | bool | A boolean value indicating whether the Meta key is pressed. |
repeat | bool | Is the key being held down? |
code | string | The value of a physical key on the keyboard. event.code of KeyboardEvent: key property - MDN |
key | string | A value that reflects the keyboard locale and layout. event.key of KeyboardEvent: key property - MDN |
simultaneous | array | If multiple keys are pressed at the same time, they are stored in an array here. An array of objects that pair "event.code or event.key" with a boolean. |
Sample Code
Get Image URL in Page
ユーザースクリプト「Get Image URL in Page」を例に処理全体の流れを解説。
- コード必須要件
- HTMLDocument Object の生成
- アンカー・画像要素の属性値から絶対URLへの変換
- コンソール出力時の注意事項
/**
* @description Get Image URL in Page
* @param {object} reserved
* @return {string} result
*/
(reserved) => {
// 必須
const { title, url, referrer, content, selection, key } = reserved;
const baseURL = url;
// content を引数に HTMLDocument 生成
const doc = (new DOMParser()).parseFromString(content, "text/html");
// dom へのアクセス
const images = doc.querySelectorAll("img");
const imageUrlList = [];
// 要素から取得した属性値と該当ページのURLを元に絶対URLを生成
const getFullPath = (elm, attr, baseURL) => {
const path = elm.getAttribute(attr);
const url = new URL(path, baseURL);
return url.href;
};
const isImageFile = (path) => {
const regexp = /\.(apng|png|avif|bmp|gif|ico|cur|jpe?g|jfif|pjpeg|pjp|svg|tiff?|webp)(\?|\?[-_!~*\'()a-zA-Z0-9;\:\@&=+\$,%#]+)?$/i;
return regexp.test(path);
}
Array.from(images).forEach(
(elm) => {
const image = ((obj, base) => {
const path = getFullPath(obj, "src", base);
return path;
})(elm, baseURL);
const anchor = ((obj, base) => {
const anc = obj.closest("a");
if (anc && anc.getAttribute("href")) {
const path = getFullPath(anc, "href", base);
return path;
}
return null;
})(elm, baseURL);
imageUrlList.push(image);
imageUrlList.push(anchor)
}
);
const list = (imageUrlList).filter(elm => (elm && isImageFile(elm)));
const result = list.join("\n");
// Debug, コンソール出力する値は「必ず文字列に変換」する事
// "toString() or JSON.stringify()" いずれかのメソッドで文字列に変換
console.log('Debug : "Get Image URL in Page" >>', result.toString());
// 必須、必ず1文字以上の文字列で返す事
return (result ? result : "Not Found Image URL.");
}
Q&A
General
ブラウザの内部URLの詳細は?
chrome://about
または chrome://chrome-urls
のURLをブラウザで開くと内部URL一覧が表示されます。
夏の暑さで気力・体力が落ちたから……ドキュメントが英語・日本語混じりなのは何故?
Setting
設定の保存に chrome.storage.local を使用している為、上限は 10MByte (JSONへの文字列化換算)です。セーブデータの上限は?
UserScript
以下のサイトはどうでしょうか?JavaScript 初心者用に参考になるサイトを教えてください
Known Issues
- Google Chrome 130 beta or dev で「閲覧中ページの情報 & キー状態」が取得できない
Contact
- Developer
- From E
- E-Mail
- extension@dabun.net
- URL
- Web Site
- https://dabun.net
- Document for "S.G.T.C."
- https://dabun.net/md/chrome-extension/send-generated-text-by-userscript-to-clipboard/
- Web Site
Link
当ページへのリンクは、個人・商用を問わずご自由に。事前の連絡は不要です。
Support
拡張機能「S.G.T.C.」の不具合報告は、
- 何が問題なのか
- 問題が発生した
- ユーザースクリプトの名前
- ページのURL
- 再現手順とそれが起こる頻度
- ブラウザの種類とバージョン
を添えて報告してください。ブラウザのリリース チャンネル Dev、Canary、それに準ずるバージョンでの不具合は対象外とします。第三者が製作したユーザースクリプトについては、その作者に問い合わせてください。
Donation
サイト維持、継続的な開発の為の寄付を受け付けています。この拡張機能に満足いただけた方、開発を応援しようとされる方はぜひよろしくお願いします。
寄付は、欲しいものリスト - Amazon 経由で送ることができます。