Gmailのパーマリンク取得
by
Lhankor_Mhy
12/01 [2025/12/01 14:19:34]
メールを開いてブックマークレットを使ってからページをクリックすると、メールのパーマリンクをクリップボードにコピーします。
@@ -6,22 +6,25 @@
* @javascript_url
*/
+// HTML構造変わるの早い……
(async () => {
- const targetDataAttributeName = "data-thread-perm-id"
+ const targetDataAttributeName = "data-message-id"
const waitForEvent = (eventTarget, eventType) => new Promise((resolve, reject) =>
eventTarget.addEventListener(eventType, resolve, { once: true, signal: AbortSignal.timeout(10000) })
)
- const targetElement = document.querySelector(`[${targetDataAttributeName}]`)
+ let targetElement = document.querySelector(`[${targetDataAttributeName}]`);
if (!targetElement) {
alert("メールを開いてからブックマークレットを使ってください")
return
}
- const threadId = targetElement?.getAttribute(targetDataAttributeName)
-
- await waitForEvent(document, 'mousedown')
+ const e = await waitForEvent(document, 'mousedown')
+ targetElement = e.target.closest(`[${targetDataAttributeName}]`) ?? targetElement;
+ // console.log(e.target)
+ // console.log(targetElement)
+ const threadId = BigInt(targetElement?.getAttribute(targetDataAttributeName).split(':')[1]).toString(16)
navigator.clipboard.writeText(`https://mail.google.com/mail/u/0/#all/${encodeURIComponent(threadId)}`)
.then(() => alert("メールのパーマリンクをクリップボードにコピーしました"))
.catch(err => {
/*
* @title Gmailのパーマリンク取得
* @description メールを開いてブックマークレットを使ってからページをクリックすると、メールのパーマリンクをクリップボードにコピーします。
* @include https://mail.google.com/
* @license CC0
* @javascript_url
*/
// HTML構造変わるの早い……
(async () => {
const targetDataAttributeName = "data-message-id"
const waitForEvent = (eventTarget, eventType) => new Promise((resolve, reject) =>
eventTarget.addEventListener(eventType, resolve, { once: true, signal: AbortSignal.timeout(10000) })
)
let targetElement = document.querySelector(`[${targetDataAttributeName}]`);
if (!targetElement) {
alert("メールを開いてからブックマークレットを使ってください")
return
}
const e = await waitForEvent(document, 'mousedown')
targetElement = e.target.closest(`[${targetDataAttributeName}]`) ?? targetElement;
// console.log(e.target)
// console.log(targetElement)
const threadId = BigInt(targetElement?.getAttribute(targetDataAttributeName).split(':')[1]).toString(16)
navigator.clipboard.writeText(`https://mail.google.com/mail/u/0/#all/${encodeURIComponent(threadId)}`)
.then(() => alert("メールのパーマリンクをクリップボードにコピーしました"))
.catch(err => {
console.error("クリップボードへのコピーに失敗しました", err)
alert("クリップボードへのコピーに失敗しました")
});
})()
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。