search by img

  • /*
     * @title search by img
     * @description search similar images by image
     * @include http:*
     * @include https:*
     * @contributor amachang http://let.hatelabo.jp/amachang/let/gYC-xauujbmgLw (Fork of)
     * @author      noromanba http://let.hatelabo.jp/noromanba/let/gYC-yuC1yoHyZw
     * @license MIT License http://www.opensource.org/licenses/mit-license
     * @javascript_url
     */
    
    // c.f.
    // http://ptech.g.hatena.ne.jp/noromanba/20121114/1352977145
    (() => {
        const attach = (ctx) => {
            Array.from(ctx.querySelectorAll('img'), img => {
                img.style.cursor = 'help';
    
                img.addEventListener('click', evt => {
                    // suppress click-handler and bubbling e.g. <a><img></a>;
                    evt.preventDefault();
                    evt.stopImmediatePropagation();
    
                    const imgurl = evt.target.src;
                    location.href = 'https://www.google.com/searchbyimage?image_url=' + encodeURIComponent(imgurl);
                });
            });
        };
        attach(document.body);
    
        new MutationObserver(records => {
            records.forEach(record => {
                attach(record.target);
            });
        }).observe(document.body, { childList: true, subtree: true });
    })();
    
    // WIP
    // handle background-image url()
    /*
    Array.from(document.querySelectorAll('*'), node => {
      const bgImg = getComputedStyle(node).backgroundImage;
      if (bgImg && bgImg !== 'none') {
        return {node, bgImg};
      }
    }).filter(spec => !!spec).forEach(spec => {
      // handle multi-bgimg c.f.
      // http://let.hatelabo.jp/noromanba/let/hLHW67STx8oc
      Array(spec.bgImg).some(img => {
        const bgURL = (img.match(/^url\(['"]?(https?:.*)['"]?\)/) || [])[1];
        if (!bgURL) return;
        // TODO
        // attach(spec) / attach(spec.node, spec.bgURL)
      });
    });
    //*/
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2017/10/27 16:40:57 - 2017-10-27
  2. 2016/02/26 03:57:11 - 2016-02-26
  3. 2016/02/26 03:50:41 - 2016-02-26
  4. 2013/02/19 10:45:18 - 2013-02-19
  5. 2013/02/19 10:44:10 - 2013-02-19
  6. 2013/02/19 10:41:45 - 2013-02-19
  7. 2012/11/21 02:01:15 - 2012-11-21
  8. 2012/11/15 18:20:06 - 2012-11-15
  9. 2012/11/15 18:18:19 - 2012-11-15
  10. 2012/11/15 18:14:39 - 2012-11-15