Gmailのパーマリンク取得

    @@ -1,36 +1,33 @@ /* * @title Gmailのパーマリンク取得 - * @description ブックマークレットを使ってからメールスレッドやタイトルなどをクリックしてください + * @description メールを開いてブックマークレットを使ってからページをクリックすると、メールのパーマリンクをクリップボードにコピーします。 * @include https://mail.google.com/ * @license CC0 * @javascript_url */ -{ - const targetDataAttributeNames = [ - "data-legacy-last-message-id", - "data-legacy-message-id", - "data-legacy-thread-id", - ] - - alert('パーマリンクを取得するメールをクリック') - console.log('test') - document.documentElement.addEventListener('click', e => { - const target = e.target; - let id; - for (const targetDataAttribute of targetDataAttributeNames) { - if (target.getAttributeNames().includes(targetDataAttribute)) { - id = target.getAttribute(targetDataAttribute); - break; - } - if (target.closest(`[${targetDataAttribute}]`)) { - id = target.closest(`[${targetDataAttribute}]`).getAttribute(targetDataAttribute); - break; - } +(async () => { + const targetDataAttributeName = "data-thread-perm-id" + const waitForEvent = (eventTarget, eventType) => new Promise((resolve, reject) => + eventTarget.addEventListener(eventType, resolve, { once: true, signal: AbortSignal.timeout(10000) }) + ) + + await waitForEvent(document, 'mousedown') + + const targetElement = document.querySelector(`[${targetDataAttributeName}]`) + if (!targetElement) { + alert("メールを開いてからブックマークレットを使ってください") + return } + const threadId = targetElement?.getAttribute(targetDataAttributeName) + + navigator.clipboard.writeText(`https://mail.google.com/mail/u/0/#all/${encodeURIComponent(threadId)}`) + .then(() => alert("メールのパーマリンクをクリップボードにコピーしました")) + .catch(err => { + console.error("クリップボードへのコピーに失敗しました", err) + alert("クリップボードへのコピーに失敗しました") + }); - prompt('パーマリンク', `https://mail.google.com/mail/u/0/#all/${id}`) +})() - }, { once: true }) -}
  • /*
     * @title Gmailのパーマリンク取得
     * @description メールを開いてブックマークレットを使ってからページをクリックすると、メールのパーマリンクをクリップボードにコピーします。
     * @include https://mail.google.com/
     * @license CC0
     * @javascript_url
     */
    
    
    (async () => {
        const targetDataAttributeName = "data-thread-perm-id"
        const waitForEvent = (eventTarget, eventType) => new Promise((resolve, reject) =>
            eventTarget.addEventListener(eventType, resolve, { once: true, signal: AbortSignal.timeout(10000) })
        )
    
        await waitForEvent(document, 'mousedown')
    
        const targetElement = document.querySelector(`[${targetDataAttributeName}]`)
        if (!targetElement) {
            alert("メールを開いてからブックマークレットを使ってください")
            return
        }
        const threadId = targetElement?.getAttribute(targetDataAttributeName)
    
        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 です。