Gmailのパーマリンク取得

    @@ -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 です。