💬
Google Chatの入力欄にメッセージを設定するUserScript
目的
Google Chatの入力欄に指定したメッセージを設定すること。
(投稿日時点では他のメッセージをコピーしてそのまま貼り付けると、謎の改行が入ってしまう現象が発生する…)
実装
ボタンの付け所に迷ったので、UserScript+ブックマークレットで実装しました。
UserScriptの内容
// ==UserScript==
// @name Google Chat 文字列設定
// @namespace https://chat.google.com/
// @version 1.0.0
// @description Google Chatのテキストボックスに文字列を設定します
// @author You
// @match https://chat.google.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=google.com
// @grant none
// ==/UserScript==
(function() {
'use strict';
// メッセージを受け取って実行する
window.addEventListener('message', e => {
if (e.origin === 'https://mail.google.com') {
setMessage(e.data);
}
});
/**
* 入力内容を設定
* @param {string} text 入力内容
*/
function setMessage(text)
{
const $textbox = document.querySelector('[role="textbox"][contenteditable="true"]');
if (!$textbox) {
return;
}
// 内容を削除
while ($textbox.firstChild) {
$textbox.removeChild($textbox.firstChild);
}
// 内容を設定
text.split('\n').forEach(line => {
const $div = document.createElement('div');
$div.textContent = line;
$textbox.append($div);
});
// カーソル位置移動
const selection = window.getSelection();
const range = document.createRange();
range.setStartAfter($textbox.lastChild);
range.setEndAfter($textbox.lastChild);
selection.removeAllRanges();
selection.addRange(range);
}
})();
ブックマークレットの内容
javascript:(() => {
if (location.origin !== 'https://mail.google.com') {
return;
}
const $iframes = document.querySelectorAll('iframe[src^="https://chat.google.com/u/0/frame"]');
const iframeArr = Array.from($iframes).filter($e => $e.parentElement.style.display !== 'none');
/* 読み込み時に開いているもの */
let $iframe = iframeArr.find($e => $e.src.includes('id=hostFrame'));
if (! $iframe) {
/* 選択して開いたもの */
$iframe = iframeArr.find($e => $e.src.includes('id=spareFrame'));
}
if ($iframe) {
$iframe.contentWindow.postMessage('設定したいメッセージ', 'https://chat.google.com');
}
})();
後書き
可能なら自動送信までやりたかったものの、方法がわかりませんでした。
もし知っている方がいたら教えていただきたいです。
Discussion