iframe2link Fork

    @@ -1,15 +1,46 @@ /* * @title iframe2link * @description replace iframe to anchor link - * @include http://* - * @include https://* + * @include http://example.com/DIY/* * @license MIT http://opensource.org/licenses/MIT * @javascript_url */ - Array.prototype.forEach.call(document.body.querySelectorAll('iframe[src]:not([src^="javascript:"])'), function (iframe) { + // UserScript - var link = document.createElement('a'); + // https://gist.github.com/noromanba/26d1804fac23f76d9dfc - link.href = iframe.src; + - link.appendChild(document.createTextNode(link.href)); + // ready to use @run-at document-start - iframe.parentNode.replaceChild(link, iframe); + - }); + (() => { + const whitelist = [ + '[src^="javascript:"]', + '[src^="http://www.facebook.com/"]', + // #twitter-widget-* .twitter-share-button .twitter-tweet-button + '[class|="twitter"]', + ].map(sel => ':not(' + sel + ')').join(''); + + const replace = (ctx) => { + if (ctx.tagName.toLowerCase() === 'iframe') { + ctx = ctx.parentNode || document.body; + } + + Array.from(ctx.querySelectorAll('iframe[src]' + whitelist)).forEach(iframe => { + const link = document.createElement('a'); + link.href = iframe.src; + link.appendChild(document.createTextNode(link.href)); + + iframe.parentNode.replaceChild(link, iframe); + }); + }; + replace(document.body); + + new MutationObserver(records => { + records.forEach(record => { + const ctx = record.target; + if (!ctx.tagName || !ctx.querySelectorAll) return; + + replace(ctx); + }); + }).observe(document.body, { childList: true, subtree: true }); + })(); +
  • /*
     * @title iframe2link
     * @description replace iframe to anchor link
     * @include http://example.com/DIY/*
     * @license MIT http://opensource.org/licenses/MIT
     * @javascript_url
     */
    
    // UserScript
    // https://gist.github.com/noromanba/26d1804fac23f76d9dfc
    
    // ready to use @run-at document-start
    
    (() => {
        const whitelist = [
            '[src^="javascript:"]',
            '[src^="http://www.facebook.com/"]',
            // #twitter-widget-* .twitter-share-button .twitter-tweet-button
            '[class|="twitter"]',
        ].map(sel => ':not(' + sel + ')').join('');
    
        const replace = (ctx) => {
            if (ctx.tagName.toLowerCase() === 'iframe') {
                ctx = ctx.parentNode || document.body;
            }
    
            Array.from(ctx.querySelectorAll('iframe[src]' + whitelist)).forEach(iframe => {
                const link = document.createElement('a');
                link.href = iframe.src;
                link.appendChild(document.createTextNode(link.href));
    
                iframe.parentNode.replaceChild(link, iframe);
            });
        };
        replace(document.body);
    
        new MutationObserver(records => {
            records.forEach(record => {
                const ctx = record.target;
                if (!ctx.tagName || !ctx.querySelectorAll) return;
    
                replace(ctx);
            });
        }).observe(document.body, { childList: true, subtree: true });
    })();
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2016/02/28 21:20:18 - 2016-02-28
  2. 2016/02/02 22:39:53 - 2016-02-02
  3. 2016/01/18 14:44:20 - 2016-01-18
  4. 2016/01/14 20:35:35 - 2016-01-14
  5. 2016/01/14 20:18:43 - 2016-01-14
  6. 2014/11/03 22:14:42 - 2014-11-03
  7. 2014/10/30 15:05:47 - 2014-10-30
  8. 2014/10/23 18:05:36 - 2014-10-23
  9. 2014/10/23 18:05:21 - 2014-10-23
  10. 2014/10/22 20:03:19 - 2014-10-22
  11. 2014/10/22 19:51:10 - 2014-10-22