// ==UserScript== // @name web漫画にショートカットキーを追加 // @description ←→:前/次のページ S:スクロール速度変更 Shift+A:頭出しオンオフ f [:全画面化 Shift+←→か ] Enter:前の話/次の話に移動 Shift+↑:作品情報ページに戻る (ニコニコ静画のみ)C:コメントオンオフ H:ヘッダ固定追従変更 (作品情報ページで)→:第1話に移動、Enter:最新話に移動、Shift+↑:パンくずリスト1つ上に移動 Shift+@:インスタントsibling登録 // @version 0.1.37 // @run-at document-end // @match *://www.comic-valkyrie.com/* // @match *://webcomic.ohtabooks.com/* // @match *://comicride.jp/* // @match *://*.5ch.net/* // @match *://*.yucl.net/* // @match *://arklightbooks.com/comics/* // @match *://bokete.jp/* // @match *://cakes.mu/* // @match *://cho-animedia.jp/comic_category/* // @match *://cho-animedia.jp/comic/* // @match *://ci.nii.ac.jp/* // @match *://comic-days.com/episode/* // @match *://tonarinoyj.jp/episode/* // @match *://shonenjumpplus.com/episode/* // @match *://kuragebunch.com/episode/* // @match *://pocket.shonenmagazine.com/episode/* // @match *://viewer.heros-web.com/episode/* // @match *://comic-fuz.com/* // @match *://comic-meteor.jp/* // @match *://comic-trail.jp/* // @match *://comic-walker.com/* // @match *://comic.mag-garden.co.jp/* // @match *://comic.pixiv.net/works/* // @match *://comic.pixiv.net/viewer/* // @match *://comic.webnewtype.com/contents/* // @match *://comicawa.com/TitleDetail/* // @match *://comicpash.jp/* // @match *://curazy.com/* // @match *://cycomi.com/fw/cycomibrowser/chapter/* // @match *://daysneo.com/works/* // @match *://ebookjapan.yahoo.co.jp/* // @match *://gammaplus.takeshobo.co.jp/* // @match *://ganma.jp/* // @match *://grapee.jp/* // @match *://hanatsubaki.shiseidogroup.jp/comic* // @match *://kawaii2ch.com/* // @match *://leedcafe.com/* // @match *://manga-park.com/title/* // @match *://manga.line.me/* // @match *://mangacross.jp/comics/* // @match *://mangahack.com/comics/* // @match *://matogrosso.jp/* // @match *://news.mynavi.jp/series/* // @match *://news.mynavi.jp/article/* // @match *://note.mu/* // @match *://online.ichijinsha.co.jp/* // @match *://rookie.shonenjump.com/series/* // @match *://rookie.shonenjump.com/users/* // @match *://ruijianime.com/* // @match *://sai-zen-sen.jp/comics/twi4/* // @match *://seiga.nicovideo.jp/watch/* // @match *://seiga.nicovideo.jp/comic/* // @match *://seiga.nicovideo.jp/manga/list?user_id=* // @match *://souffle.life/author/* // @match *://souffle.life/manga/* // @match *://storia.takeshobo.co.jp/manga/* // @match *://sukupara.jp/* // @match *://to-ti.in/* // @match *://urasunday.com/* // @match *://watamote.com/* // @match *://web-ace.jp/* // @match *://webcomicgamma.takeshobo.co.jp/* // @match *://webcomics.jp/* // @match *://www.alphapolis.co.jp/manga/* // @match *://www.comic-earthstar.jp/* // @match *://www.comic-essay.com/episode/* // @match *://www.comic-essay.com/neko/* // @match *://www.comicbunch.com/manga/* // @match *://www.comico.jp/challenge/* // @match *://www.comico.jp/articleList* // @match *://www.comico.jp/detail* // @match *://www.comico.jp/challenge/detail* // @match *://www.ebigcomic4.jp/title/* // @match *://www.ganganonline.com/* // @match *://www.jstage.jst.go.jp/* // @match *://www.mangabox.me/reader/* // @match *://www.moae.jp/comic/* // @match *://*.moae.jp/lineup/* // @match *://www.nicovideo.jp/search/* // @match *://www.sunday-webry.com/detail* // @match *://www.tatan.jp/* // @match *://www.zenyon.jp/lib/* // @match *://yasudadou.futene.net/* // @match *://yawaspi.com/* // @match *://yomitai.jp/* // @match *://yusb.net/* // @match *://comic-boost.com/* // @match *://futabanet.jp/* // @match *://hobbyjapan.co.jp/* // @match *://comip.jp/* // @match *://comic-action.com/episode/* // @match *://www.comic-ryu.jp/* // @match *://ashitano.tonarinoyj.jp/* // @match *://debut.shonenmagazine.com/* // @match *://medibang.com/* // @match *://mangalifewin.takeshobo.co.jp/* // @match *://nikkangecchan.jp/* // @match *://www.mangabox.me/special/* // @match *://www.gamespark.jp/* // @match *://kodansha-cc.co.jp/* // @match *://kinmaweb.jp/* // @match *://pachikuri.jp/* // @match *://comici.jp/* // @match *://books.vipdoor.info/* // @match *://mankai.jp/* // @match *://cbiz.shueisha.co.jp/* // @match *://comic-gardo.com/episode/* // @match *://sokuyomi.jp/* // @match *://comic-polaris.jp/* // @match *://www.yatate.net/* // @match *://sonorama.asahi.com/* // @match *://csbs.shogakukan.co.jp/book* // @match *://www.comic-medu.com/* // @match *://comic-zenon.com/episode/* // @match *://sportsbull.jp/* // @match *://magcomi.com/episode/* // @match *://omocoro.jp/writer* // @match *://www.sukima.me/* // @match *://ddnavi.com/serial/* // @match *://www.gentosha.jp/series/* // @match *://www.gentosha.jp/article/* // @match *://crea.bunshun.jp/* // @match *://booklive.jp/* // @match *://kansai.mag-garden.co.jp/* // @match *://getnavi.jp/* // @match *://mavo.takekuma.jp/* // @match *://curazy.com/manga/* // @match *://margaretbookstore.com/* // @match *://4komagram.com/* // @match *://kidsna.com/* // @match *://dot.asahi.com/* // @match *://animesoku.com/* // @match *://www.lezhin.com/* // @match *://j-nbooks.jp/* // @match *://www.cmoa.jp/* // @match *://www.mangaz.com/* // @match *://vw.mangaz.com/* // @match *://sp.comics.mecha.cc/* // @match *://bigcomicbros.net/* // @match *://bookwalker.jp/* // @match *://comic.k-manga.jp/* // @match *://pokeman.jp/* // @match *://static.ichijinsha.co.jp/* // @match *://piccoma.com/* // @match *://oshiete.goo.ne.jp/watch/* // @match *://www.comicgum.com/* // @match *://kuzure.but.jp/* // @match *://comic.mf-fleur.jp/* // @match *://may.2chan.net/* // @match *://*.ftbucket.info/scrapshot/* // @match *://note.com/* // @match *://sp.handycomic.jp/* // @match *://ebookstore.sony.jp/* // @match *://kc.kodansha.co.jp/* // @match *://jumpsq.shueisha.co.jp/* // @match *://sp.comics.mecha.cc/* // @match *://wanibooks-newscrunch.com/* // @match *://renta.papy.co.jp/* // @match *://yanmaga.jp/* // @match *://mankai.jp/* // @match *://yuik.net/* // @match *://togetter.com/* // @match *://pash-up.jp/* // @match *://*.fanbox.cc/posts/* // @match *://pie.co.jp/* // @match *://manga-5.com/* // @match *://feelweb.jp/episode/* // @match *://www.123hon.com/* // @match *://novema.jp/* // @match *://www.comicnettai.com/* // @match *://www.comicride.jp/* // @match https://digitalmargaret.jp/detail/* // @match https://digitalmargaret.jp/contents/* // @match *://comicborder.com/* // @match *://i-voce.jp/* // @match *://inthelife.club/* // @match *://konomanga.jp/* // @match *://www.pixiv.net/* // @match *://firecross.jp/* // @match *://corocoro.jp/* // @match *://www.mishimaga.com/* // @match *://bunshun.jp/* // @match *://my-best.com/* // @match *://the360.life/* // @match *://boards.4channel.org/* // @match *://shonenjumpplus.com/* // @match *://game.asahi.com/* // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @require https://code.jquery.com/jquery-3.3.1.min.js // @namespace https://greasyfork.org/users/181558 // @downloadURL none // ==/UserScript== // @match *://*/* (function() { const PopupHelpMS = 4000; // ポップアップの表示時間 const debug = 0; // verbose console.log dc() const LogMatch = 0; // 1でメタデータブロックを生成(開発用) const ButtonBG = "background-color:#3050f0;"; const SITEINFO = [{ url: '//game.asahi.com/', firstEpisode: '//ul/li[last()]/div[contains(@class,"list-article__col")]/p/a', lastEpisode: '//ul[@class="list-article__list"]/li[1]/div/p[2]/a', }, { url: '//shonenjumpplus.com/', firstEpisode: '//section[last()]/div/h1[@class="entry-title"]/a|//div/ul[@class="recent-entries hatena-urllist urllist-with-thumbnails"]/li[last()]/div/a[last()]', lastEpisode: '//section[1]/div/h1[@class="entry-title"]/a|//ul/li[1]/div[@class="urllist-item-inner recent-entries-item-inner"]/a[2]', sibling: '//div/div[@class="entry-content"]/p', author: '//h2[@class="series-header-author"]', }, { url: '//boards.4channel.org/', sibling: '//div[@class="post reply"]/..|//div[@class="post op"]/..', disableSnapWhenPageIsClicked: 1, }, { url: '//the360.life/', sibling: '//div/div/section[@class="block"]', atamadashi: '//div[@class="bread-crumb bread-crumb_top"]', disableSnapWhenPageIsClicked: 1, }, { url: '//my-best.com/', sibling: '//div[@id="ranking"]/div[last()]/div/div/div|//div[@class="p-contents-item-part"]', atamadashi: '//div/div[6]/div[@id="ranking"]|//h2[@class="p-contents-ranking-header__title"]', disableSnapWhenPageIsClicked: 1, }, { url: '//bunshun.jp/', firstEpisode: '//div[last()]/h3[@class="title"]/a', lastEpisode: '//a[@class="border" and text()="最新回を読む"]', sibling: '//a[@class="thumb-link ga_tracking"]/img[@class="main-image"]/../../..', header: '//header[@role="banner"]', author: '//p[@class="author"]/a', }, { url: '//www.mishimaga.com/', sibling: '//div[@class="pcVer"]/p/img', author: '//p[@class="name author"]', header: '//div[@class="head-wrap"]', }, { url: '//corocoro.jp/', firstEpisode: '//div[last()]/div/h2[@class="article_title"]/a/span/..', lastEpisode: '//div[1]/div/h2[@class="article_title"]/a/span', author: '//div[@class="author_name"]', sibling: '//div[@class="wp-editor"]/p/img', // ページによって書式が違うので効かないページがかなりある }, { url: '//firecross.jp/', firstEpisode: '//li[1]/ul/li/form/button[@class="btn-free"]', lastEpisode: '//li[last()]/ul/li/form[@data-api="reader"]/button[@class="btn-free"]', author: '//section/div/ul[@class="ebook-series-author"]/li/a', nextEpisode: '//button[@class="btn--simple--arrow" and contains(text(),"次の話を読む")]', leftKey: '//button[@class="btn--simple--arrow" and contains(text(),"次の話を読む")]', pankuzuUp: '//main/div/div/a[@class="btn-close" and text()="閉じる"]', }, { url: '//www.pixiv.net/users/', author: '//div/div/div/div[1]/div/h1', }, { url: '//konomanga.jp/', firstEpisode: '//a[@id="firstStory"]/span[text()="第1話を読む"]/..', lastEpisode: '//div[2]/a[@id="latestStory"]/span', author: '//div/p[@id="authorName"]', }, { url: '//inthelife.club/', firstEpisode: '//div[@class="contLeft"]/section/div[2]/ul/li[last()]/a/div[@class="txtBox"]/p[1]/../..', lastEpisode: '//div[1]/section/div[2]/ul/li[2]/a/div[@class="txtBox"]/p[1]', sibling: '//div[@class="kizi-honbun"]/img', header: '//header[@class="headerFixed"]', nextEpisode: '//div[@class="contBtn"]/a', }, { url: '//i-voce.jp/', firstEpisode: '//div/ul/li[last()]/a/div/div/div/div[2]/p[@class="title_2AUDo"]/../../../../..', lastEpisode: '//div[2]/div[1]/div/ul/li[1]/a/div[1]/div/div/div[2]/p[@class="title_2AUDo"]', nextEpisode: '//a[@class="wp-block-ve-nextpage-copy__text"]', }, { url: '//comicborder.com/', author: '//h2[@class="series-header-author"]', }, { url: 'https://digitalmargaret.jp/contents/', leftKey: '//div[@class="r-inner"]/div/a[contains(text(),"話を読む")]', }, { url: '//digitalmargaret.jp/detail/', firstEpisode: '//div[last()]/div[@class="btn"]/a[contains(text(),"読む")]', lastEpisode: '//div[1]/div[@class="btn"]/a[contains(text(),"読む")]', }, { url: '//www.comicride.jp/', firstEpisode: '//div[last()]/div/a/span[@class="p-pickup-img"]/span/span[@class="p-pickup-img__badge-free" and text()="FREE"]/../../..', lastEpisode: '//div[1]/div/a[@tabindex="0"]/span[@class="p-pickup-img"]/span/span[@class="p-pickup-img__badge-free"]', }, { url: '//www.comicnettai.com/', firstEpisode: '//div/a[last()]/div/span[text()="読む"]', lastEpisode: '//a[1]/div[3]/span[@class="btn--detail--read"]', author: '//span[@class="detail__author__item"]', }, { url: '//novema.jp/', firstEpisode: '//ul/li/a[text()="第1話を読む"]', lastEpisode: '//a[text()="最新話を読む"]', author: '//ul[@class="credit"]/li', }, { url: '//www.123hon.com/', lastEpisode: '//div[2]/div[2]/ul[@class="read-story"]/li/a[text()="最新話を読む"]', firstEpisode: '//ul[contains(@class,"read-story")]/li/a[text()="第1話を読む"]', pankuzuUp: '//div[@class="r-inner"]/div[4]/a[text()="シリーズ一覧"]', }, { url: '//feelweb.jp/episode/', author: '//h2[@class="series-header-author"]', }, { url: '//manga-5.com/', firstEpisode: '//div[@class="product-state"]/ul/li[1]/a[1]', lastEpisode: '//ul[@class="list_series list-items"]/li[last()]/a[1]', author: '//div/div/div[@class="series-title"]/h3/strong', }, { url: '//pie.co.jp/', firstEpisode: '//ul[@class="articleBlockButton"]/li[last()]/a[text()="1話を読む"]|.//li[last()]/a/h3[@class="seriesPostList_title"]', lastEpisode: '//ul/li[@class="articleBlockButton_node"]/a[text()="最新話を読む"]', author: '//p[@class="articleBlock_textBox_name"]', nextEpisode: '//a[text()="次の連載を読む"]', prevEpisode: '//div/a[text()="前の連載を読む"]', }, { url: '//.+.fanbox.cc/posts/.+', nextEpisode: '//div[@class="sc-1vjtieq-18 jOKXGO"]/a/div', prevEpisode: '//div[@class="sc-1vjtieq-19 dlQSkX"]/a/div', sibling: '//div/div/article/div[1]/h1|//article/div[1]/div/div/div/div/div', atamadashi: '//div/div/article/div[1]/h1|//article/div[1]/div/div/div/div/div', header: '//div[@id="root"]/div[4]', pankuzuUp: '//a[text()="一覧に戻る"]', funcNextPrev: () => { setTimeout(() => { loadfocus(0, SITE.atamadashi) }, 1) }, }, { url: '//pash-up.jp/', lastEpisode: '//a[@class="c-btn_read02"]/span[contains(text(),"最新話を読む")]/..', firstEpisode: '//div/a[contains(@class,"c-btn_read01")]/span[text()="1話を読む"]', }, { url: '//togetter.com/', sibling: '//article/div[@class="tweet_box"]/div|//div/main/div/div[@id="comment_box"]/div', header: '//div[@class="header_navigator"]|//header[@id="header"]', disableSnapWhenPageIsClicked: 1, }, { url: '//yuik.net/', sibling: '//div[@class="clearfix"]/div|//article/div[@class="grid"]/div/div/figure/img/..', lastEpisode: '//div[@id="mainEntity"]/div[@class="clearfix"]/div[@class="entry-content"]/ul[1]/li[1]/div/div[2]/a[@rel="noopener external" and @class="external"]|//div[@id="the-content" and contains(@class,"entry-content")]/ul[1]/li[1]/div/div[last()]/a', firstEpisode: '//div/div[2]/div/div[@id="the-content"]/div[last()]/ul[last()]/li[last()]/div[@class="row bg-light"]/div[last()]/a[@target="_blank" and @rel="noopener"]', }, { url: '//mankai.jp/', firstEpisode: '//div[@class="pGrayWrapper"]/ul/li[last()]/a/h3/..', lastEpisode: '//div[@class="pGrayWrapper"]/ul[@class="modThreeBannerList"]/li[1]/a/h3', author: '//div/p[@class="modProfileArtistName typesquare_option"]', nextEpisode: '//div[@class="pageLeaveStoryBtnArea"]/p[1]/a', prevEpisode: '//div[@class="pageLeaveStoryBtnArea"]/p[2]/a', pankuzuUp: '//p/a[@class="pageComicImageLink" and text()="作品ページへ"]', }, { url: '//yanmaga.jp/', firstEpisode: '//li[1]/a[@class="ga-episode-link"]', // //ul[last()]/li[last()]/a[@class="mod-episode-link"]/div[last()]/div[1]/p lastEpisode: '//a[@class="ga-episode-link"]/span[text()="最新話を読む"]|//a[@class="ga-episode-link" and contains(text(),"最新記事を読む")]', author: '//div/ul[@class="mod-author"]/li/a/h2|//div[1]/div[@class="episode-info"]/div[2]/ul/li[@class="episode-info-author"]/h2/a', nextEpisode: '//a[@class="episode-button-next"]/span', prevEpisode: '//a[@class="episode-button-prev"]/span', pankuzuUp: '//a[@id="xCVLastPageTopBtn" and @class="-cv-last-btn last_page_top_button"]', }, { url: '//renta.papy.co.jp/', firstEpisode: '//span[@class="rent_btn_word" and text()="無料サンプル"]', // author: '//span[@data-book="author"]/a', }, { url: '//comicride.jp/', firstEpisode: '//div[last()]/div/a[@tabindex="0"]/span[@class="p-pickup-img"]/span[2]/../..', lastEpisode: '//span[@class="p-pickup-img__badge-free"]', }, { url: '//wanibooks-newscrunch.com/', firstEpisode: '//a[last()]/div[@class="m-articles-item__ttl"]/..|//a[text()="作品を読む"]', lastEpisode: '//a[1]/div[@class="m-articles-item__ttl"]|//a[text()="作品を読む"]', author: '//a[@class="article-header-authors__item c-author"]', pankuzuUp: '//div[@class="c-btn c-btn--black u-mb20"]/a[text()="連載トップへ戻る"]', }, { url: '//sp.comics.mecha.cc/', firstEpisode: '//a[@rel="nofollow" and @id="sampleBtn" and contains(text(),"無料試し読み")]', author: '//a[@class="p-bookInfo_author"]', }, { url: '//jumpsq.shueisha.co.jp/', firstEpisode: '//div[@class="btn"]/a/span[contains(text(),"試し読み")]/..', author: '//section/div[@class="contents rensai"]/h2/em', }, { url: '//kc.kodansha.co.jp/', firstEpisode: '//a[contains(text(),"試し読みする")]', author: '//div[@class="author"]/a', }, { url: '//ebookstore.sony.jp/', firstEpisode: '//a[@sample="1" and contains(text(),"試し読み")]', }, { url: '//sp.handycomic.jp/', firstEpisode: '//a[@class="btn--base-bg-blue" and text()="無料試し読み"]', author: '//div[@class="author-list"]/a', }, { url: '//note.com/', sibling: '//img[@data-modal="true"]/../..', author: '//div[@class="o-noteContentHeader__name"]/a', // header:'//div[@class="o-navbarNoteDetail__body"]', }, { url: '//may.2chan.net/|//.{3}.ftbucket.info/scrapshot/', sibling: '//td[@class="rtd"]/../../..|//div[@class="thre"]/span[2]', pankuzuUp: '//a[text()="掲示板に戻る"]', disableSnapWhenPageIsClicked: 1, }, { url: '//comic.mf-fleur.jp/', firstEpisode: '//div[@class="cb-story-links__item--title" and contains(text(),"第1話")]|.//div[@class="cb-story-links__item--title" and contains(text(),"第1回")]', lastEpisode: '//div[last()]/div[@class="cb-story-links__item--title"]', sibling: '//div[contains(@class,"acms-grid")]/div/img/..', prevEpisode: '//div[2]/a[@class="manga-pager__btn _prev"]', nextEpisode: '//div[@class="manga-pager"]/a[@class="manga-pager__btn _next"]', pankuzuUp: '//div[@class="cb-buttons__list--text"]', author: '//a[@class="cb-author__link"]', }, { url: '//kuzure.but.jp/', sibling: '//tr/td[@class="rtd"]/../../..|.//body/span[@class="csb"]', pankuzuUp: '//a[text()="[HOME]"]', disableSnapWhenPageIsClicked: 1, }, { url: '//www.comicgum.com/', firstEpisode: '//ul[@class="comicsmall"]/li[last()]/a/h3', lastEpisode: '//a[@class="overlay"]/h3[text()="最新話を読む"]', }, { url: '//oshiete.goo.ne.jp/watch/', header: '//header/div[@id="header"]', firstEpisode: '//div[@class="writing_btn"]/a[text()="第1話から読む"]', lastEpisode: '//li[1]/div[@class="writingList_inner"]/a/div[2]/h3[@class="writingList_title"]', author: '//div[@class="writing_writer"]/a|//div[@class="profile_rt"]/h1[@class="profile_title"]', nextEpisode: '//a[@class="nextRt" and text()="次の話"]', prevEpisode: '//a[@class="prevLt" and text()="前の話"]', sibling: '//p[@class="articleText comic_main_img"]/img', pankuzuUp: '//h2[@class="comicProfile_title"]/a', }, { url: '//comip.jp/nekoyoko/', sibling: '//div[@id="manga"]/canvas', author: '//div[@class="comic-detail-content-right"]/h2', nextEpisode: '//img[@class="btn-next-story"]|//img[@class="btn-next-story align-right"]', prevEpisode: '//img[@class="btn-prev-story align-left"]|//img[@class="btn-prev-story"]', }, { url: '//piccoma.com/', //func:()=>{elegeta('//section/div[last()]/a[@class="PCM-productSaleList_toFullList"]').forEach(e=>{e.click()})}, firstEpisode: '//a[@id="js_readFirstEpisode"]/span/..|//li[1]/a/div[@class="PCM-epList_ep"]/div[1]/h2|//a[contains(@class,"PCM-prdVol_readBtn")]/span[contains(text(),"試し読み")]', lastEpisode: '//a[@id="js_readContinue"]/span', leftKey: '//a[@class="PCM-viewer2ReadBtn"]/span[contains(text(),"無料で")]|//button[@class="btn btn-default" and contains(text(),"移動する")]', author: '//ul[@id="js_author"]/li/a', }, { url: '//static.ichijinsha.co.jp/', firstEpisode: '//p[2]/a[contains(text()," HTML5版でブックを開く")]', pankuzuUp: '//p[@class="pagelist_link"]/a', }, { url: '//pokeman.jp/', firstEpisode: '//div[1]/div/p/a[@class="manga-viwer-button"]', pankuzuUp: '//a/span[text()="無料まんが"]', }, { url: '//comip.jp/spinel/', firstEpisode: '//ul/li[1]/a/span[2]/span[@class="c-marker"]/../..', lastEpisode: '//a[@class="works__new__button"]', author: '//div[@class="works__title__inner"]/div/h3|//div[@class="cst_author"]', }, { url: '//pokeman.jp/', firstEpisode: '//a[@class="manga-viwer-button" and contains(text(),"漫画の続きを読む")]', }, { url: '//comic.k-manga.jp/', firstEpisode: '//a[@class="book-info--btn btn__secondary" and contains(text(),"無料試し読み")]|//a[@class="book-info--btn book-info--btn__jikuri"]/img|//div[@class="book-info--btn-wrap"]/a[@rel="nofollow" and contains(text(),"試し読み")]', pankuzuUp: '//ol[@class="breadcrumb--target"]/li[last()-1]/a', }, { url: '//bookwalker.jp/', firstEpisode: '//div[@class="main-cover-inner"]/span[text()="試し読み"]/../..|//a[@aria-label="試し読み"]/span[@class="btn-txt" and text()="試し読み"]', author: '//a[@class="author-name"]', }, { url: '//bigcomicbros.net/', firstEpisode: '//span[@class="btn-link__txt" and contains(text(),"試し読み")]', author: '//p[@class="comic-detail-main__author"]', }, { url: '//sp.comics.mecha.cc/', firstEpisode: '//a[@class="btnBlue" and text()="第1話を読む"]', lastEpisode: '//ul[@class="listNews"]/li[1]/a/div/div/p[@class="listArticleTitle"]', sibling: '//div[@class="comic_content_area"]/p/img/..', header: '//ul[@class="mechamaga_nav"]', prevEpisode: '//div[1]/div/ul/li[@class="prev"]/a', nextEpisode: '//div[2]/div/ul[@class="comic_paging"]/li[@class="next"]/a', author: '//p[@class="short_comic_author"]/a', }, { url: '//vw.mangaz.com/', firstEpisode: '//a[@class="btn" and text()="すぐに読む"]', pankuzuUp: '//ul/li[@class="btnEnd"]/a/span[text()="本を閉じる"]', }, { url: '//www.mangaz.com/', firstEpisode: '//button[@class="open-viewer book-begin" and contains(text(),"無料で読む")]|//button[@class="open-viewer series-begin ga" and text()="最初から読む"]|.//p/button[@type="button" and @class="open-viewer book-begin ga" and contains(text(),"無料で読む")]', nextEpisode: '//p[@class="nextBtnModBtn"]/a[@target="mangaz-viewer"]', author: '//div[@class="bookHeadDetail"]/ul/li/h2/a|//div[3]/div[@class="header"]/ul/li[1]/a|//section[@class="head"]/h1[@class="authorName"]', pankuzuUp: '//div[@class="rightMod"]/ul/li/a[text()="書誌に戻る"]|//div[@class="topicPath"]/ul/li[2]/a', moveEpisodeFunc: (e) => { if (e.dataset.url || e.href) { location.href = e.dataset.url || e.href; } else { e.click() } }, // mangazのためだけの処理 }, { url: '//www.cmoa.jp/', firstEpisode: '//div[@class="btn2_area_btn3 GA_free"]|//a/div[@class="btn2_area_btn1 GA_free"]|//div[@class="btn2_area_btn4 GA_free"]', author: '//div[@class="title_details_author_name"]/a', }, { url: '//j-nbooks.jp/', lastEpisode: '//a[@class="button btn_main" and text()="最新話を読む"]', firstEpisode: '//a[@class="button btn_main" and text()="1話目を読む"]', nextEpisode: '//a[@class="linkToNext"]', pankuzuUp: '//div[@class="container"]/div/a[text()="作品ページへ戻る"]', disableSnapWhenPageIsClicked: 1, registFunc: () => { $(document).keydown(e => { if (e.keyCode == 37) { $(eleget0('//div[contains(@class,"swiper-button-next swiper-button-black") and @role="button" and @aria-label="Next slide"]')).click(); } else if (e.keyCode == 39) { $(eleget0('//div[@class="swiper-button-prev swiper-button-black" and @aria-label="Previous slide"]')).click(); } }) }, }, { url: '//www.lezhin.com/', firstEpisode: '//div[@class="comicInfo__btns"]/a[text()="最初から読む"]', author: '//div[@class="comicInfo__artist"]/a', pankuzuUp: '//a[contains(@class,"vh__episodeLink")]', }, { // url: '//animesoku.com/', sibling: '//div[@class="t_h"]/div[@class="t_b"]/span[1]/..', }, { url: '//dot.asahi.com/', firstEpisode: '//li[last()]/article/div/a/h2[@class="comicAuthorListTitle"]/..', lastEpisode: '//li[1]/article/div/a/h2[@class="comicAuthorListTitle"]', sibling: '//div[@class="comicAtclAreaPhoto"]/img/..', nextEpisode: '//li[@class="comicArticlePagerNext"]/a', prevEpisode: '//li[@class="comicArticlePagerPrev"]/a', pankuzuUp: '//li[@class="comicArticlePagerTop"]/a', author: '//div[@class="articlProfileInfo"]/p[@class="articlProfileNameTxt"]/a|//p[@class="comicAuthorNameTxt"]', }, { url: '//kidsna.com/', lastEpisode: '//ul/li[1]/div[@class="articlelist-content"]/div/a/h2', firstEpisode: '//ul/li[last()]/div[@class="articlelist-content"]/div/a/h2', author: '//div[@class="article-item-kidsna-link-publisher"]/div/div[@class="article-item-kidsna-link-title"]/p', }, { // url: '//4komagram.com/', sibling: '//div[@class="p-users-profile__posts"]/article', header: '//header', disableSnapWhenPageIsClicked: 1, author: '//h2[@class="p-users-profile__head__title u-align-center"]', }, { url: '//margaretbookstore.com/', firstEpisode: '//li[last()]/div[@class="bookItemStory"]/div[last()]/a', lastEpisode: '//li[1]/div[@class="bookItemStory"]/div/a', }, { url: '//curazy.com/manga/', firstEpisode: '//ul[@class="manga_tabContent_list"]/li[1]/a[@class="list_item_episode_stories"]/span[2]', lastEpisode: '//ul[@class="manga_tabContent_list"]/li[last()]/a/span[2]', author: '//div[@class="manga_mainContent manga_mainContent_basicInfoWrap"]/dl[1]/dd/a/span', }, { url: '//mavo.takekuma.jp/', firstEpisode: '//a[last()]/li/div/p[@class="mangatitle"]', lastEpisode: '//ul[@class="manga"]/a[1]/li/div/p[@class="mangatitle"]', sibling: '//img[@class="protector"]/..', header: '//html/body/nav[@id="header"]/div[@id="menu"]', pankuzuUp: '//div[@id="slide"]/div/a/img[@alt="タイトルへ戻る"]', }, { url: '//getnavi.jp/category/comic/|//getnavi.jp/comic/', firstEpisode: '//div[last()]/div[@class="category-color-before-comic"]/div[2]/a', lastEpisode: '//div[1]/div[@class="category-color-before-comic"]/div[2]/a', sibling: '//img/..', author: '//p[@class="name"]/a[@rel="author"]', pankuzuUp: '//div[@class="inner"]/div[@class="entry-content more"]/blockquote/p/a', }, { url: '//kansai.mag-garden.co.jp/', firstEpisode: '//div[@class="entry_contents multiple"]/div[2]/div[2]/ul[@class="btn"]/li[1]/a/span/..|//div[@id="back_number"]/div[last()]/div/ul/li/a|.//li[@class="btn_pink"]/a/span[contains(text(),"読切を読む")]', lastEpisode: '//div/div[@class="entry_box"]/div[2]/div[last()]/div[last()]/ul/li[1]/a/span', }, { url: '//booklive.jp/', //firstEpisode: '//a/span[text()="まるごと無料試し読み"]/..|//span[@class="btn_txt" and text()="ブラウザ試し読み"]|//a/span[text()="無料で読む"]', firstEpisode: '//div[@class="product_actions"]/ul[last()]/li[2]/a/span[text()="ブラウザ試し読み"]|//ul[@class="sub_actions clearfix"]/li[last()]/a/span[text()="無料で読む"]|//div[@id="product_area1"]/div/div/ul/li/a/span[contains(text(),"無料で読む")]', // author: '//dl[@class="author clearfix"]/dd/a', }, { // ニコニコ静画(漫画) url: '//seiga.nicovideo.jp/watch/|//seiga.nicovideo.jp/comic/|//seiga.nicovideo.jp/manga/list', sibling: '//div[@class="pages"]/ul/li', // //ul[contains(@id,"page_")]/..',// '//div[@class="note"]/..|//div[@class="note balloon_disabled"]/..|//div[@class="pages"]/ul/li', header: '//div[@class="common-header-cdesjj"]|//div[@class="detail_inner"]/div[3]/section[@id="ko_head_bar_min"]', //'//body/div[@id="CommonHeader"]/div/div', atamadashi: '//div[@class="note"]|//div[@class="note balloon_disabled"]|//img[@class="lazyload"]|//div[@class="pages"]/ul/li', author: '//div[@class="author"]/h3/span|//span[@class="author_name"]|//span[@class="author_info"]/div[@class="name"]/a', // Amazonを基点に~の管轄 firstEpisode: '//a[@class="first"]', lastEpisode: '//a[@class="last"]', prevEpisode: '//p[@class="prev"]/a', nextEpisode: '//span[@class="next_text"]|//a[@class="next"]', pankuzuUp: '//div/div/div[@class="title"]/h1/span[@class="manga_title"]/a[1]|//a/span[@class="author_name"]' }, { url: '//crea.bunshun.jp/', firstEpisode: '//li[last()]/a/p[@class="title"]', lastEpisode: '//li[1]/a/p[@class="title"]', author: '//div[@class="box cf"]/div/h2[@class="name"]|//div[1]/div[@class="cf"]/p[@class="text-right"]', sibling: '//figure[@class="image-area figure-center"]|//article/figure[@class="image-area figure-center notdisplay"]/img/..', header: '//header[@id="header"]', /* }, { url: '//crea.bunshun.jp/', firstEpisode: '//div[@class="item cf"]/div[@class="box-right"]/div[last()]/a/p[@class="title"]/..', lastEpisode: '//div[@class="box-right"]/div[2]/a/p[@class="title"]', author: '//div[@class="box cf"]/div/h2[@class="name"]', sibling: '//figure[@class="image-area figure-center"]|//article/figure[@class="image-area figure-center notdisplay"]/img/..', header: '//header[@id="header"]', */ }, { url: '//www.gentosha.jp/series/|//www.gentosha.jp/article/', firstEpisode: '//div[@class="btnStyle01"]/a[text()="第1回から読む"]', lastEpisode: '//article[1]/a/div/h2[@class="title"]', author: '//ul[@class="authorList"]/li/label/cite', sibling: '//div[@id="content"]/div/div[1]/p/img/..|//div[@class="figure-center"]/img/..', nextEpisode: '//div[contains(@class,"seriesLink")]/ul/li[last()]/a', prevEpisode: '//div/div[contains(@class,"seriesLink")]/ul/li[1]/a', pankuzuUp: '//div[@id="container"]/div[@id="topicPath"]/ol/li[3]/a', }, { url: '//ddnavi.com/serial', sibling: '//article/div[2]/div/figure/img[contains(@class,"lazy")]/../..|.//img[@data-lazy-type="image"]/../..', nextEpisode: '//p[@class="buttonlink"]/a[contains(text(),">> 次のページに続く")]|//a[@class="next" and text()="次の回"]', prevEpisode: '//a[@class="prev" and contains(text(),"前の回")]', firstEpisode: '//ul/li[last()]/div[@class="archives-list__info fr"]/div/div/a[text()="続きを見る"]|//ul/li[last()-1]/div/div/div[@class="archives-list__link fr"]/a', lastEpisode: '//ul/li[1]/div/div[@class="clearfix"]/div/a[text()="続きを見る"]', author: '//span[@itemprop="author"]/span', }, { url: '//www.sukima.me/', //firstEpisode: '//div[1]/div/div/a[@onclick="return false;" and @class="no-user-select button-free" and contains(text(),"最初から読む")]|.//div[1]/div/div[3]/a[@onclick="return false;" and @class="no-user-select button-free" and contains(text(),"試し読み")]|//div[1]/div/div[3]/a[@class="no-user-select button-store" and contains(text(),"0で読む")]|//div[1]/div/div[3]/a[contains(@class,"no-user-select button-free") and text()="期間限定無料で読む"]|//div[1]/div/div/div/div[last()]/a[@class="no-user-select button-free" and text()="最初から読む"]|//div[1]/div[@style="z-index: 2;"]/div[2]/div[contains(@class,"tags")]/div/a[@href="#" and @onclick="return false;" and text()="試し読み"]', firstEpisode: '//button[@type="button" and contains(text(),"最初から読む")]|//button[text()="試し読み"]|//button[text()="期間限定無料で読む"]|//button[text()="¥0で読む"]', author: '//a[@class="author"]', nextEpisode: '//a[@class="js-ripple chaptEndNavi__page__next--free"]|//div[@class="chaptEndNavi__page"]/a[1]', //'//i[@class="material-icons" and text()="menu"]|.//div[@class="chaptEndNavi__page"]/a[1]', pankuzuUp: '//div[@class="golinks border-left"]/a[last()]|//li[last()]/a[@class="v-breadcrumbs__item"]|//a[@class="chaptEndNavi__page__next--last js-ripple"]', delay: 500, // pankuzuUp: '//a[@class="chaptEndNavi__page__next--last js-ripple"]', }, { url: '//omocoro.jp/writer', lastEpisode: '//div[@class="details"]/div[3]/a[contains(text(),"漫画")]', firstEpisode: '//div[last()]/div[last()]/div[3]/a[contains(text(),"漫画")]', }, { url: '//sportsbull.jp/', firstEpisode: '//div[last()]/ul/li[last()]/div/div[2]/a[contains(text(),"読む!")]', lastEpisode: '//a[@data-is-free="1" and @class="comics_btn" and text()="読む!"]', }, { url: '//comic-zenon.com/episode/', author: '//h2[@class="series-header-author"]', }, { url: '//www.comic-medu.com/', firstEpisode: '//div[@class="btDetail"]/a[@class="btDetailL" and contains(text(),"第1話")]|//ul[@class="episode"]/li[1]/a|//div[3]/a[@class="btDetailR" and text()="読む"]', lastEpisode: '//a[@class="btDetailR" and text()="最新話"]|//a[@class="btDetailR" and text()="最新回を読む"]', author: '//div[@class="author"]/div/h3', pankuzuUp: '//div[@class="storyDrawer"]/div[2]/a', }, { url: '//csbs.shogakukan.co.jp/book', firstEpisode: '//a[@class="button is-link"]/span[contains(text(),"試し読み")]|//a[@class="button is-link"]/span/em[contains(text(),"まるごと試し読み")]', author: '//dl[1]/dd[@class="column"]/ul/li/a', }, { url: '//sonorama.asahi.com/', firstEpisode: '//li[last()]/div[@class="series_comic_btn"]/a', lastEpisode: '//li[1]/div[@class="series_comic_btn"]/a', author: '//div[@class="m10 comic"]/div/a', leftKey: '//button[@class="slick-next"]', rightKey: '//button[@class="slick-prev"]', nextEpisode: '//ul[@class="comicViewer_nav_list"]/li/a[text()="次話"]', prevEpisode: '//ul[@class="comicViewer_nav_list"]/li/a[text()="前話"]', pankuzuUp: '//ul[@class="comicViewer_nav_list"]/li/a[text()="一覧へ"]', }, { url: '//www.yatate.net/', firstEpisode: '//li[last()]/article/div[@class="detail"]/h1/a', lastEpisode: '//li[1]/article/div[@class="detail"]/h1/a', }, { url: '//comic-polaris.jp/', firstEpisode: '//a[text()="第1話を読む"]|//div[@class="latest_info_link_btn01"]/a[text()="読み切りを読む"]', lastEpisode: '//a[text()="最新話を読む"]', author: '//div[@class="work_author_intro_name"]', }, { url: '//bunshun.jp/', firstEpisode: '//li[last()]/div/h3[@class="title"]/a', lastEpisode: '//p[@class="latest-link"]/a', author: '//div/p[@class="name"]|//div/div[@class="author-box"]/p[@class="author"]/a', sibling: '//div[@class="image-with-link"]/a/img/../../..', nextEpisode: '//a[@class="arrow" and text()="NEXT"]', prevEpisode: '//div[@class="prev"]/a[@class="arrow"]', pankuzuUp: '//div[@class="series-title"]/h2/a', }, { url: '//sokuyomi.jp/', firstEpisode: '//div[2]/a[contains(text(),"無料で読む")]|//div[@id="AP_thumb_area"]/a[text()="試し読み"]', //author: '//div[@class="author"]/a', }, { url: '//cbiz.shueisha.co.jp/', firstEpisode: '//ul[@class="pageLink"]/li/a[text()="第1話を読む"]', lastEpisode: '//ul[@class="pageLink"]/li/a[contains(text(),"最新話を読む")]', author: '//main[@class="sblab"]/section[@class="read"]/em', }, { url: '//mankai.jp/', firstEpisode: '//ul/li[1]/a[@class="js-viewerlink"]/h3/..', lastEpisode: '//ul/li[last()]/a[@class="js-viewerlink"]/h3', pankuzuUp: '//button[@value="作品一覧に戻る"]|//a[@class="gbFooterListLink" and contains(text(),"作品一覧")]', author: '//p[@class="modProfileArtistName"]', }, { url: '//books.vipdoor.info/', firstEpisode: '//dl[@id="comic-parts"]/dd[1]/ol/li[1]/a', lastEpisode: '//dd[last()]/ol[@class="comic-part-pages"]/li[last()]/a', nextEpisode: '//a[@rel="next"]', prevEpisode: '//a[@rel="prev"]', sibling: '//div[@id="article"]/ol/li/a/img', pankuzuUp: '//a[@class="page-nav-link"]', }, { url: '//comici.jp/', lastEpisode: '//div[1]/div[1]/h2[contains(@class,"manga-title")]/a|//a[@class="btn-bulk-serieslist"]|//div[last()]/div[3]/h2[@class="box-line-title"]/a', firstEpisode: '//div/a[@class="g-btn mode-more"]|//div[last()]/div[1]/h2[@class="manga-title"]/a|//div/div[last()]/div/div/a[text()="はじめから読む"]', author: '//a[@class="prof-h-name-link"]|//div[@class="col-sm-9 col-xs-8 series-user-box"]/a/span[@class="article-text"]', sibling: '//div[@class="row row2-line"]/div[4]/img', prevEpisode: '//a[@class="click-link" and text()=" 前話"]', nextEpisode: '//span[@class="title-next"]|//a/div[@class="ep-f-nav-h" and text()="次の話"]', pankuzuUp: '//a[@class="a-series-title"]|//div[@class="col-sm-9 col-xs-8 series-user-box"]/a/span[@class="article-text"]|//div/div[@class="content-box-inner"]/div/div[last()]/div[@class="col-xs-12"]/a[text()="戻る"]', //header: '//header[@id="xHeader"]', //delay:500, }, /* { url: '//comici.jp/', author: '//a[@class="prof-h-name-name"]|//div[@class="manga-info-userbox"]/div/div/a', pankuzuUp: '//div/a/span[@class="a-username"]', sibling: '//div[contains(@class,"manga-area")]/img', firstEpisode: '//div[last()]/h3[@class="manga-list-h"]/a|//div[last()]/h3[@class="rensai-list-h"]/a|//a[@class="btn" and text()="第1話から読む"]', lastEpisode: '//div[1]/h3[@class="manga-list-h"]/a|//div[1]/h3[@class="rensai-list-h"]/a|//a[@class="btn" and text()="最新話を読む"]', nextEpisode: '//div[@class="series-next-btn"]/a[@class="btn"]|.//div[@class="series-next-btn"]/a', prevEpisode: '//div[2]/div[@class="article-btn"]/a[contains(text(),"前話")]', },*/ { url: '//pachikuri.jp/', firstEpisode: '//div[@class="sakuhinFuncs__btnFirst"]/a', lastEpisode: '//div[@class="sakuhinFuncs__btnLatest"]/a', sibling: '//main[@id="js-manga"]/img|//main/span[@class="not_resizing"]/img', author: '//span[@class="sakuhinDtails__author"]|//div[@class="headline__txt__author--mangaHead"]', nextEpisode: '//a[contains(text(),"次の話へ")]', prevEpisode: '//a[@class="mangaFuncs__btn mangaFuncs__btn--prev"]', pankuzuUp: '//a[contains(text(),"作品紹介ページへもどる")]', }, { url: '//kinmaweb.jp/', sibling: '//div/a[@class="no-icon"]/img/..', }, { // url: '//kodansha-cc.co.jp/', firstEpisode: '//dl[last()]/dd/div/div[@class="pcv"]/a/div[@class="comic-more"]', lastEpisode: '//dl[1]/dd/div[@class="smanone2"]/div/a/div[@class="comic-more"]', author: '//div[@id="seriesHeader"]/ul/li' }, { url: '//www.gamespark.jp/', firstEpisode: '//div[@class="news-list"]/section[last()]/a[@class="link"]', lastEpisode: '//div[@class="news-list"]/section[1]/a[@class="link"]', sibling: '//article/div[@class="txt-center"]/a/img/..|//a/img[@class="inbody-img"]/..|//article/div[@class="txt-center"]', header: '//header[@class="thm-header"]/nav', pankuzuUp: '//div/article[contains(@class,"arti-body cf cXenseParse")]/div/a/b', disableSnapWhenPageIsClicked: 1, }, { url: '//www.mangabox.me/special/', firstEpisode: '//ul[@class="episodes_list"]/li[1]/a/div/div/span[1]', lastEpisode: '//li[last()]/a/div/div/span[@class="episodes_strong_text is_new"]', }, { url: '//nikkangecchan.jp/', firstEpisode: '//div[@class="button"]/a[text()="1話から読む"]', lastEpisode: '//div[contains(@class,"btnBox")]/div/a[text()="最新話を読む"]', author: '//div[@class="author"]' }, { url: '//mangalifewin.takeshobo.co.jp/', firstEpisode: '//div/div[contains(@class,"extMdlSeriesMngrBookInner")]/ul[last()]/li[last()]/div[@class="bookR"]/table[@cellpadding="5"]/tbody/tr[2]/td[1]/a', lastEpisode: '//ul[@class="bookul"]/li[1]/div[@class="bookR"]/table[@width="100%" and @cellpadding="5"]/tbody/tr[last()]/td[last()]/a', sibling: '//div[@class="extMdlSeriesMngrArticleMargin"]/a/img/..|//div[@class="extMdlSeriesMngrArticle-inner"]/div/img', author: '//p[@class="cAuthorName"]' }, { url: '//medibang.com/', firstEpisode: '//div[last()]/div/div[last()]/a[@class="btn read"]|//li/div/a[@class="jq_readFixed" and contains(text(),"WEBで読む")]', lastEpisode: '//div[1]/div/div[@class="btn_area"]/a[@class="btn read"]', }, { url: '//debut.shonenmagazine.com/', firstEpisode: '//div[last()]/div/div[@class="card-cmn-comic-in"]/div[@class="box-detail"]/div/a[@class="box-detail__link-group"]/h3/span', lastEpisode: '//div[1]/div/div[@class="card-cmn-comic-in"]/div/div/a[@class="box-detail__link-group"]/h3/span', author: '//div[@class="box-profile-small-01"]/div[@class="txt-normal"]/a' }, { url: '//ashitano.tonarinoyj.jp/', firstEpisode: '//div[@id="contributor-work-list-theme-item-wrap"]/section[last()]/a/h3/span/../..|//section[1]/a/div/p[@class="series-episode-number"]|//div[last()]/section[@class="contributor-work-item"]/a/div/div[1]/h3/span', lastEpisode: '//section[@id="contributor-work-list"]/div[1]/section/a/div/div/h3/span|//section[last()]/a/div[@class="series-item-status"]/p', author: '//section[@class="contributor-profile js-contributor-profile"]/h1|//div/div[@class="series-contributor"]/a/p[@class="series-profile-name"]/span' }, { url: '//www.comic-ryu.jp/', firstEpisode: '//li[last()]/p[@class="readbtn"]/a', lastEpisode: '//li[2]/p[@class="readbtn"]/a/span', nextPage: '//a[@id="NextLink" and @title="次ページ"]', prevPage: '//a[@id="PrevLink" and @title="前ページ"]', nextEpisode: '//div[@id="NextGo"]/a[@id="nextLast"]', pankuzuUp: '//div[@id="toback"]/a[text()="作品ページへ戻る"]', author: '//div/div[@class="namebox"]/p[@class="name"]/span', }, { url: '//comip.jp/z/', firstEpisode: '//div[@class="column_main"]/ul/li[last()]/div[@class="thumb"]/a', lastEpisode: '//div[@class="column_main"]/ul/li[1]/div[@class="thumb"]/a', author: '//div[@class="creator"]' }, { // ツイ4(1) url: '//sai-zen-sen.jp/comics/twi4/', sibling: '//article', //header: '//body/header/div[@class="hgroup"]', atamadashi: '//article[last()]', author: '//h3[1]/span[@class="work-author"]', lastEpisode: '//article[last()]/header/div/h3', }, { // 花椿 url: '//hanatsubaki.shiseidogroup.jp/comic', sibling: '//div/figure/img/../../../../../../../..', //'|//section/div', header: '//div[@class="controller"]/div[1]', author: '//div[@class="row text-center"]/div[@class="col col-8 col-sm-12 person"]/div[@class="grid"]/div[@class="row text-left"]/div[last()]/h4[1]' }, { // web漫画アンテナ url: '//webcomics.jp/', sibling: '//div[@class="entry"]', header: '//div[@id="header"]', disableSnapWhenPageIsClicked: 1, }, { // bokete url: '//bokete.jp/', sibling: '//div/div/div[@class="boke"]', header: '//div/div[@id="top-bar"]', disableSnapWhenPageIsClicked: 1, }, { // url: '//ruijianime.com/', sibling: '//div[@class="sm_one_tag_search recent_tag"]|//div[@class="sm_one"]', disableSnapWhenPageIsClicked: 1, }, { // コミックぜにょん url: '//www.zenyon.jp/lib/', sibling: '//div[@id="viewer_content"]/img', nextEpisode: '//a/img[@class="btn_next"]/..', author: '//p[@class="author"]', firstEpisode: '//div/ul[@id="sakuhin_backnumber_ul"]/li[last()]/a[text()="1"]', lastEpisode: '//p[@class="sakuhin_btn_new"]/a/img/..', pankuzuUp: '//a/img[@alt="作品ページへ" and @class="btn_sakuhin"]/..', }, { // url: '//souffle.life/manga/', sibling: '//div[@class="sf-content_img"]/img', header: '//div[@id="sf-scroll_header"]', nextEpisode: '//span[@class="sf-next_btn"]/a', prevEpisode: '//span[@class="sf-before_btn"]/a', firstEpisode: '//section[1]/div[@class="sf-content sf-authors"]/section[@class="sf-content_books_related"]/div/article[3]/div/div[@class="sf-contents_book_read"]/a|//div[@class="sf-content_book_related"]/article[last()]/div/div[@class="sf-contents_book_read"]/a', ////article[last()]/div/div[@class="sf-contents_book_read"]/a', lastEpisode: '//div[@class="alm-reveal"]/article[1]/div[@class="sf-content_book_description"]/div/a', pankuzuUp: '//p[@class="sf-content_book_name"]/a', author: '//span[@class="sf-author_name"]', }, { // url: '//souffle.life/author/', firstEpisode: '//section[1]/div[@class="sf-content sf-authors"]/section[@class="sf-content_books_related"]/div/article[3]/div/div[@class="sf-contents_book_read"]/a', ////article[last()]/div/div[@class="sf-contents_book_read"]/a', lastEpisode: '//div[@class="alm-reveal"]/article[1]/div[@class="sf-content_book_description"]/div/a', author: '//span[@class="sf-author_name"]', }, { // url: '//www.moae.jp/comic/|.moae.jp/lineup/', sibling: '//div[@class="img"]/a/img/../..', lastEpisode: '//ul[@class="detail-trial"]/li[1]/a', author: '//section/section[@class="mod-profile-block"]/dl/dt', pankuzuUp: '//li[@class="lineup"]/a/img' }, { // コミックエッセイ劇場 url: '//www.comic-essay.com/episode/', sibling: '//div[@class="manga-imgs"]/img', prevEpisode: '//ul/li[@class="prev"]/a', nextEpisode: '//li[@class="next"]/a', firstEpisode: '//div[@class="cell a_t"]/p[@class="ro_t abg_text"]', lastEpisode: '//a[@class="ro"]/p[last()]', author: '//p[@class="author"]|//a/span[@class="name"]', pankuzuUp: '//ul[@class="breadcrumb wrap c-fix"]/li[last()-1]/a' }, { // url: '//www.comic-essay.com/neko/', sibling: '//article/div[@class="scene"]/img', header: '//body/div[@id="pagetop"]/header', nextEpisode: '//div[2]/ul/li[last()]/a[text()="次の話"]', prevEpisode: '//div[@class="pagenation pc"]/ul/li/a[contains(text(),"前の話")]', disableSnapWhenPageIsClicked: 1, author: '//div[@class="txtarea"]/h4[@class="ttl-name"]', firstEpisode: '//li[1]/a[@class="btn-episode"]/p/..', lastEpisode: '//div[@class="episode-new"]/a/p|//li[last()]/a[@class="btn-episode"]/p/..', pankuzuUp: '//div[@id="pagetop"]/ul/li[last()-1]/a', }, { // 裏サンデー url: '//urasunday.com/', sibling: '//img[@class="dumimg"]/..', // nextEpisode: '//div[@id="prBanner"]/a[contains(text(),"次の話を今すぐ読む!! →")]', firstEpisode: '//div[@class="comicInner"]/ul[2]/li[1]/a', lastEpisode: '//div[@class="comicButtonDateBox"]/a', author: '//li[@class="detailComicTitle"]/h2|//div[@id="comicDetail"]/h2|//div[@class="author"]', pankuzuUp: '//li/a[@href="../index.html"]', // func: function() { $(eleget0('//div[@id="btn-scale"]/div[1]/div[text()="拡大"]')).click(); } }, { // やわらかスピリッツ url: '//yawaspi.com/', sibling: '//div/div[@class="page__detail__vertical"]/div/ul/li/img/..|//section[@class="comicContainer"]/a/img[1]/..|//div[@class="vertical__inner"]/ul/li/img', firstEpisode: '//section[@class="page__detail"]/div[@class="page__detail__inner"]/div[@class="detail__image"]/span|//ul[@class="inner__content"]/li[last()]/a/dl/dt', lastEpisode: '//ul[@class="inner__content"]/li/a/dl/dt|//li[@class="-new"]/a/dl/dt', author: '//li[@class="comicDetails"]/hgroup[1]/h2|//header[@class="header -page"]/div[@class="page__header"]/p/strong', pankuzuUp: '//li[@class="browserCtrlLeft"]/a' }, { // コミックバンチ url: '//www.comicbunch.com/manga/', sibling: '//div[@class="view"]/a/img/..|.//span[@class="guard_np"]/../..', nextEpisode: '//ul[@class="btn cf"]/li/a[text()="次の話"]', prevEpisode: '//ul[@class="btn cf"]/li/a[text()="前の話"]', firstEpisode: '//div[@class="backnumber cf"]/ul/li[last()]/a', lastEpisode: '//div[@class="backnumber cf"]/ul[@class="cf"]/li[1]/a', author: '//div[@id="comics"]/h4|//div[@class="title"]/h3|//div/div[@class="title push"]/h3', pankuzuUp: '//a[text()="作品紹介"]' }, { // コミックDAYS他 url: '//comic-days.com/episode/|//tonarinoyj.jp/episode/|//shonenjumpplus.com/episode/|//kuragebunch.com/episode/|//pocket.shonenmagazine.com/episode/|//viewer.heros-web.com/episode/|//comic-action.com/episode/|//comic-gardo.com/episode/|//magcomi.com/episode/', author: '//h2[@class="series-header-author"]', //'//div/h2[@class="series-header-author"]' }, { // /* url: '//ganma.jp/', author: '//h4[@class="ng-binding"]', firstEpisode: '//a[@class="detail-action-some"]', lastEpisode: '//ol[@class="story"]/li/a/div/time[not(contains(text(),"配信予定"))]/../..', */ url: '//ganma.jp/', author: '//figure[@ng-if="magazine.author.isDefined"]/figcaption/h4[@class="ng-binding"]', firstEpisode: '//li[1]/a[@class="detail-action-all"]', lastEpisode: '//ol[@class="story"]/li/a/div/time[not(contains(text(),"配信予定"))]/../..', }, { // url: '//www.sunday-webry.com/detail', author: '//div[@class="detail-block__image--author"]', firstEpisode: '//a[last()]/div/div[@class="detail-block__item--title"]', lastEpisode: '//div[@class="detail-block__item--latest"]', }, { // url: '//rookie.shonenjump.com/series/|//rookie.shonenjump.com/users/', // sibling: '//p[@class="page-area js-page-area"]/img/..', // header: '//header[@id="header"]/div/h2', //nextEpisode: '//a[contains(text(),"続きを読む")]', author: '//span[@class="user-name"]/a/strong|//h2[@class="user-name"]|//p[2]/a/span[@class="user-name"]', firstEpisode: '//li[1]/a/p[1]/span/../..', lastEpisode: '//li[last()]/a/p[1]/span/../..', pankuzuUp: '//a[contains(text(),"作品ページへ")]|//a/span[@class="series-title"]', leftKey: '//div/div[@class="page-upper"]/div/p/a[@class="button next-episode-button"]', }, { // url: '//www.comico.jp/challenge/|//www.comico.jp/articleList', author: '//p[contains(@class,"__author")]/a|//article/div/p[@class="user-comment02__name"]/a', //firstEpisode: '//div[contains(@class,"list-episode02__body")]/p[text()="第1話"]/../..|//a[@class="list-episode02__item-inner _articleListItem" and @data-articleno="1"]/div/div[1]/div[@class="list-episode02__label-group "]|//ul/li[1]/a/div/p[contains(@class,"list-episode")]', firstEpisode: '//ul/li[1]/a[@class="list-episode02__item-inner" and @data-articleno="1"]/div/p|//ul/li[1]/a[@class="btn03 btn03--white _nextArticleBtn" and text()="はじめから読む"]|//div[contains(@class,"list-episode02")]/ul[@class="list-episode02__list _articleList"]/li[1]/a/div/p', lastEpisode: '//div[@class="stage__body stage__body--fixed-footer"]/div[2]/div[@class="stage__ly-col2-main stage__ly-col2-main--episode"]/div[last()]/ul/li[last()]/a[@class="list-episode02__item-inner"]/div[contains(@class,"list-episode02__body")]/p', prevEpisode: '//a/img[@alt="前の話"]/..', nextEpisode: '//a/img[@alt="次の話"]/..', pankuzuUp: '//a[@class="comico-global-header02__list-nav-item-inner"]/i[@class="i-arrow-l i-arrow-l--large"]|//div[@class="article-hero03__body"]/p[1]/a[1]', }, { // url: '//www.comico.jp/detail|//www.comico.jp/challenge/detail', prevEpisode: '//a/img[@alt="前の話"]/..', nextEpisode: '//a/img[@alt="次の話"]/..', author: '//p[contains(@class,"__author")]/a', pankuzuUp: '//a/img[@alt="話一覧"]/..', }, { // url: '//daysneo.com/works/', author: '//div/p[@class="author"]/a[1]', firstEpisode: '//li[1]/div[last()]/dl/dt/strong/a', lastEpisode: '//li[last()]/div[last()]/dl/dt/strong/a', pankuzuUp: '//a[text()="作品詳細ページへ"]', nextEpisode: '//span[text()="次の話へ"]', }, { // url: '//ebookjapan.yahoo.co.jp/', disableSnapWhenPageIsClicked: 1, //func:()=>{setTimeout(()=>{let e=eleget0('//*[@class="header__title"]');if(e){document.title=e.innerText; } } ,2000)}, // 作品名をタブ名に入れる // できない author: '//p[@class="book-main__author"]/a|//p[@class="book-main__author underline"]/a|//a[@class="contents-caption__author underline"]', // firstEpisode: '//a[@class="btn btn--primary btn--read btn--sub-text" and contains(text(),"無料")]|//a[@class="btn btn--primary btn--read btn--sub-text" and contains(text(),"試し読み")]', // lastEpisode: '', firstEpisode: '//a[@class="btn btn--primary btn--read" and text()="始めから読む"]|//a[@class="btn btn--primary btn--read btn--sub-text" and contains(text(),"無料")]|//a[@class="btn btn--primary btn--read btn--sub-text" and contains(text(),"試し読み")]|//li[last()]/div/div[@class="book-item__actions"]/a[contains(@class,"btn")]/strong[text()="無料"]|//a[@class="btn btn--primary btn--read"]|//div[@class="book-main__purchase"]/a[contains(text(),"試し読み")]|//a[@aria-current="page" and contains(text(),"始めから読む")]|//button[@type="button" and contains(text(),"始めから読む")]', lastEpisode: '//li[1]/div[@class="book-item book-item--disp-list book-item--btn-include-single"]/div[2]/a/strong|//div[2]/ul/li[1]/button/span[contains(@class,"icon-btn__text") and contains(text(),"無料")]', }, { // url: '//mangacross.jp/comics/', author: '//div[@class="comic-area__author"]|//p[@class="viewer-page__author"]', firstEpisode: '//a[text()="1話から読む"]|//a[text()="第1話を読む"]', lastEpisode: '//a[text()="最新話を読む"]|//ul[@class="episode-list"]/li[1]/a/div[2]' }, { // url: '//comic.mag-garden.co.jp/', author: '//div/div[@class="inner"]/h3' }, { // url: '//www.mangabox.me/reader/', author: '//div/p[@class="episodes_author"]', lastEpisode: '//SPAN[@class="episodes_strong_text is_new"]/../..', firstEpisode: '//li[last()]/a/div/div[@class="episodes_item_detail"]/span' }, { // url: '//cycomi.com/fw/cycomibrowser/chapter/', firstEpisode: '//a[1]/div/p[@class="chapter-title"]', lastEpisode: '//a[last()]/div/p[@class="chapter-title"]', author: '//p[@class="title-author"]', pankuzuUp: '//a[text()="作品TOP"]', }, { // url: '//mangahack.com/comics/', sibling: '//div[@class="comic_img"]/img/..', header: '//header[1]', nextEpisode: '//li[@class="right"]/a', author: '//div[@class="nameArea cf"]/div[@class="official"]/a|//div/div[@class="comicTitle cf"]/ul/li/span[@class="c_name"]/a|//div[@class="cf"]/p/a', firstEpisode: '//a[text()="はじめから読む"]', lastEpisode: '//li[last()]/a[text()="最新話を読む"]', prevEpisode: '//li[@class="left"]/a', pankuzuUp: '//div[1]/ul[@class="cf"]/li/span[1]/a', }, { // url: '//manga-park.com/title/', author: '//p[@class="author txtColorSubject"]', firstEpisode: '//ul/li[1]/div[1]/div[@class="right info"]/div[1]/p', }, { // url: '//www.alphapolis.co.jp/manga/', author: '//div/div[@class="author"]/span/a[1]|//div[@class="mangaka"]/a|//div[@class="author-label"]/div[2]/a', firstEpisode: '//div[@class="first-time-free"]/a[contains(text(),"第1回を無料で読む")]|//section/div[@class="manga-detail-toc section"]/div[@class="toc"]/div[contains(@class,"episode-list")]/a[last()]/div[2]/div[1]|//a[text()="第1回を読む"]', lastEpisode: '//div[@class="episode-list"]/a[1]/div/div[1]/../..|//div[1]/a[last()]/object[1]/a/span[text()="この話を読む"]', }, { // url: '//web-ace.jp/', sibling: '//div[@class="box inner viewerImageBox"]/a/img[1]/../../..', nextEpisode: '//section/div/div/a[text()="次の話へ"]', prevEpisode: '//a[text()="前の話へ"]', firstEpisode: '//a[contains(text(),"最初から読む")]', lastEpisode: '//ul/li[1]/a/div/div[@class="media-body"]/p[@class="text-bold"]', pankuzuUp: '//a[text()="作品TOPへ"]', }, { // url: '//comic.webnewtype.com/contents/', sibling: '//div[@id="viewerContainer"]/div/div[@class="box inner viewerImageBox"]/a/img[1]/../../..', nextEpisode: '//a/img[@alt="次の話"]/..', prevEpisode: '//header[@class="ViewerHeader"]/nav/a/img[@alt="前の話へ"]/..', author: '//span[@class="WorkSummary-headerinfo"]', firstEpisode: '//a[contains(text(),"最初から読む")]|//ul[@id="episodeList"]/li[last()]/a/div/div[last()]/p', lastEpisode: '//section/ul/li[1]/a/div/h3[@class="ListCard-title"]/../..|//li[1]/a/div[2]/div[2]/p[@class="number"]', pankuzuUp: '//h1[@class="ViewerHeader-title"]/a', atamadashiDelay: 600 }, { // url: '//www.ebigcomic4.jp/title/', lastEpisode: '//span[@class="episodeName"]', }, { // url: '.5ch.net/', sibling: '//div[@class="post"]', //'//dl[@class="thread"]/dt|//span[@class="number"]/../..', header: '//nav[@class="navbar-fixed-top search-header"]/div', disableSnapWhenPageIsClicked: 1, }, { // url: '//www.ganganonline.com/', firstEpisode: '//a[last()]/div[2]/p[contains(@class,"Chapter_chapter__mainText__")]', lastEpisode: '//a[2]/div[contains(@class,"Chapter_chapter__body__")]/p[1]', author: '//p[contains(@class,"title_detail__author__3hga4")]', delay: 1000, leftKey: '//button[contains(@class,"viewer_viewer__nextChapterButton__") and contains(text(),"次の話へ")]', //firstEpisode: '//ul[@class="past_2c"]/li[1]/a/span/strong|//a[@class="gn_link_list"]/span/strong[contains(text(),"第1話")]|//a[@class="gn_link_list"]/span/strong[contains(text(),"第一話")]|//a[@class="gn_link_list"]/span/strong[contains(text(),"第1章")]', //lastEpisode: '//li[5]/a[@class="gn_link_btn"]/img[@alt="読む"]/..|//dl[@class="clearfix"]/dd/ul/li[@class="gn_detail_story_btn"]/a[@class="gn_link_btn"]/img[@alt="読む"]', }, { // url: '//watamote.com/', sibling: '//span[@class="res"]/..', disableSnapWhenPageIsClicked: 1, }, { // url: '//news.mynavi.jp/series/|//news.mynavi.jp/article/', // sibling: '//img[@class="photo_table__img lazyload"]|//td/img[@class="lazyload" and @src="images/001.jpg"]|//ul[@class="photo_table"]/li', sibling: '//div[@class="article-body"]/ul/li/img/../..|//img[@class="photo_table__img is-loaded"]', author: '//a[@class="article-author__name"]|//div[@class="article-author"]/a', firstEpisode: '//div/section[last()]/div[@class="tile3__link js-link"]/div[@class="tile3__thumb"]/div/img[@class="tile3__img"]|//div/main[@class="main"]/section/table[@class="table"]/tbody/tr[last()]/td/a[@class="table__link"]|.//ul[@class="summaryList_list gtm"]/li[last()]/a/div[@class="summaryList_listNode_info"]/h3', lastEpisode: '//section[1]/div/div/div[@class="tile3__img-wrap"]/img|//main[@class="main"]/section[@class="box"]/table[@class="table"]/tbody/tr[1]/td[@class="table__td"]/a|.//li[1]/a[@class="summaryList_listNode_link"]/div[@class="summaryList_listNode_info"]/h3', pankuzuUp: '//p[@class="article-header__series"]/a', //header:'//div[@class="headerTop"]|//nav[@class="headerNav"]', }, { // url: '//matogrosso.jp/', sibling: '//div[@class="asset-body"]/div/img|//div[@class="asset-body"]/img|//div[@class="asset-body"]/div/div/img|//div[@class="asset-content entry-content"]/img', author: '//h3[@class="widget-header"]/a', firstEpisode: '//div[@class="asset-content"]/div[@class="asset-body"]/dl/dd[last()]/a', lastEpisode: '//div[@class="asset-body"]/dl/dd[1]/a', pankuzuUp: '//h3[@class="widget-header"]/a[1]', }, { // url: '//sukupara.jp/', sibling: '//div[@class="magarea"]/img/..', // nextEpisode: '//li[@id="next-page-btn"]/a/img', //uAutoPagerizeを使うべき // prevEpisode: '//li[@id="prev-page-btn"]/a/img', //uAutoPagerizeを使うべき author: '//div[@id="artist"]/dl/dt', firstEpisode: '//a/img[@alt="第1回はコチラから"]', lastEpisode: '//p[@class="newest-story-tit"]/a', pankuzuUp: '//ul[@class="menulist clearfix"]/li[last()-1]/a', }, { // url: '//cho-animedia.jp/comic_category/|//cho-animedia.jp/comic/', sibling: '//div[@class="contents"]/p/img', //'//section[@class="contents_area"]/div[@class="contents"]', // header: '//html/body/header[@class="fixed"]', nextEpisode: '//dl[last()]/dt/a/img[@class="attachment-full size-full wp-post-image"]/..', prevEpisode: '//dl[1]/dt/a/img[@class="attachment-full size-full wp-post-image"]/..', firstEpisode: '//li[last()]/a/div[@class="photo"]/img/../..', lastEpisode: '//li[1]/a/div[@class="photo"]/img/../..', pankuzuUp: '//div[@class="breadcrumbs"]/ul/li[last()-1]/a', }, { // url: '//leedcafe.com/', author: '//div[@class="creator-header clearfix"]/h2/a', lastEpisode: '//div[1]/div/div/div/p/a[@class="btn btn-default"]', firstEpisode: '//div[last()]/div/div[@class="inner"]/div/p/a[@class="btn btn-default" and text()="この話を読む"]', }, { // url: '//storia.takeshobo.co.jp/manga/', author: '//div[@class="name_intro_author"]', firstEpisode: '//div[last()]/div[@class="box_episode_text"]/a[@class="btn"]', lastEpisode: '//div[last()]/div[1]/div[@class="box_episode_text"]/a[1]', pankuzuUp: '//a[text()="作品ページへ"]', }, { // url: '//www.tatan.jp/', sibling: '//div[@id="viewer_content"]/img', nextEpisode: '//a/img[@class="btn_next"]', prevEpisode: '//a/img[@class="btn_prev"]', author: '//p[@class="author"]', firstEpisode: '//ul[@id="sakuhin_backnumber_ul"]/li/a[text()="1"]', lastEpisode: '//a/img[@alt="最新話を読む"]/..', pankuzuUp: '//a/img[@class="btn_sakuhin"]/..', }, { // url: '//cakes.mu/', sibling: '//img[@class="dropshadow"]/..|.//div[5]/p/img/..|//div[4]/div[@class="article-content"]/h1', //|//div[@class="article-content"]/h1', header: '//header[@class="postHeader"]', nextEpisode: '//li[@class="navi-items next"]/a[@data-ga="post:header:next"]', prevEpisode: '//li[@class="navi-items prev"]/a[@data-ga="post:header:previous"]', author: '//div/p[@class="post-author"]/span|//div[@data-cakes-amazon=""]/div[@id="container_right"]/div/h3/a', firstEpisode: '//li[last()]/h3[@class="post-title-full"]/a', lastEpisode: '//li[1]/h3[@class="post-title-full"]/a', pankuzuUp: '//h2[@class="post-title"]/a', }, { // url: '//kawaii2ch.com/', sibling: '//div[contains(@class,"t_h")]/div/..|//a[@class="related-entry-title-link"]/../../../..', disableSnapWhenPageIsClicked: 1, }, { // url: '//comicpash.jp/', sibling: '//main[@class="manga row"]/img', author: '//p[@class="mangaMainTitle__name"]', firstEpisode: '//a[contains(text(),"第1話を読む")]', lastEpisode: '//a/em[contains(text(),"最新話")]/..', pankuzuUp: '//section[@typeof="BreadcrumbList"]/div[@class="row"]/span[2]/a/span/..', }, { // url: '//www.nicovideo.jp/search/', sibling: '//li[@class="item nrn-thumb-info-done"]', header: '//div[@id="siteHeader"]', disableSnapWhenPageIsClicked: 1, }, { // url: '//www.jstage.jst.go.jp/', sibling: '//ul[@class="search-resultslisting"]/li', header: '//body/span[@class="noprint"]/header/nav', disableSnapWhenPageIsClicked: 1, }, { // url: '//ci.nii.ac.jp/', sibling: '//div[@class="listitem xfolkentry"]/..', header: '//div[@id="nav-content"]', disableSnapWhenPageIsClicked: 1, }, { // url: '//comic.pixiv.net/viewer/', pankuzuUp: '//div[@class="series-summary"]/div/a|//div[contains(@class,"NavBar_close__")]/img', prevEpisode: '//li[@class="prev-story story-navigation"]/a', nextEpisode: '//li[@class="next-story story-navigation"]/a', delay: 500, }, { // url: '//comic.pixiv.net/works/', author: '//div[@class="works-author"]|//div/div[contains(@class,"Header_author__")]/span|//body/div/div/div/div[last()]/div/div[@class="Header_largeInner__ie-pc"]/div/div/span|//div[last()]/div/div[3]/div[@class="flex-grow"]/div/span[@class="text-sm text-text2-default"]', firstEpisode: '//a[text()="最初から読む"]|//span[text()="最初から読む"]', lastEpisode: '//a[1]/div/div[@class="episode-num"]/../..|//div/div[3]/div[1]/a|//div[@class="w-full"]/div/a[1]/div[2]/span', }, { // firstEpisode: '//div[@id="product_state"]/ul/li[1]/a', lastEpisode: '//li[last()]/a[@class="link-over"]', url: '//comic-fuz.com/', disableSnapWhenPageIsClicked: 1, author: '//div/div[contains(@class,"author")]/div/p/a', pankuzuUp: '//button[@title="閲覧をやめる"]', }, { // url: '//comicawa.com/TitleDetail/', firstEpisode: '//div[@role="button" and text()="はじめから読む"]', lastEpisode: '//div[@role="button" and text()="最新話を読む"]', }, { url: '//manga.line.me/', firstEpisode: '//li[1]/a[@data-action="read" and @data-is_rich=""]/span/..|//a[@class="MdBtn03Read01" and contains(text(),"最初から読む")]|//div[last()]/div[@class="mdIND13Txt"]/a/h3', lastEpisode: '//li[3]/a[@data-action="read" and @data-is_rich=""]/span/..|//div[@class="fnAutoPagingContainer"]/div[1]/div/a/h3', nextEpisode: '//a[@class="fnButtonNextChapter"]', author: '//dd[@class="mdMNG04Dd01"]/a', }, { // url: '//to-ti.in/', disableSnapWhenPageIsClicked: 1, firstEpisode: '//div[@class="page_pager"]/p[@class="prev"]/a/span', lastEpisode: '//div[@class="page_pager"]/p[@class="next"]/a/span', author: '//div[@class="profile"]/div/div/p[@class="name"]', nextEpisode: '//a[@class="next" and text()="次のエピソード"]', prevEpisode: '//a[@class="prev" and text()="前のエピソード"]', pankuzuUp: '//div[@class="content"]/h2/a', }, { // url: '//yomitai.jp/', sibling: '//li[@class=""]/figure/img/../..', nextEpisode: '//li[@id="article-nav-next"]/a', prevEpisode: '//li[@class="series-prev"]/a', disableSnapWhenPageIsClicked: 1, author: '//figcaption[@class="author-name"]', firstEpisode: '//ul[@class="list"]/li[last()]/div/h3/a', lastEpisode: '//ul[@class="list"]/li[1]/div/h3/a', pankuzuUp: '//a/figure/figcaption[text()="連載の一覧はこちら"]', }, { // url: '//comic-trail.jp/', disableSnapWhenPageIsClicked: 1, author: '//div[@class="series-detail"]/h2', firstEpisode: '//a[contains(text(),"1話を読む")]', lastEpisode: '//a[contains(text(),"最新話を読む")]', pankuzuUp: '//a[contains(text(),"作品ページに戻る")]', }, { // url: '//gammaplus.takeshobo.co.jp/', disableSnapWhenPageIsClicked: 1, author: '//div[@class="name_intro_author"]', firstEpisode: '//div[last()]/div[last()-1]/div/a[contains(text(),"読む")]', lastEpisode: '//a[@class="btn" and text()="最新エピソードを読む"]|.//section[@class="episode"]/div/div[1]/div/a[1]', }, { // note url: '//note.mu/', sibling: '//a[@rel="noopener noreferrer" and @class="o-noteContentImage__itemLink a-link"]/img/../..', header: '//div[@id="__layout"]/div/header', nextEpisode: '//a[@class="o-sliblingNote__link o-sliblingNote__link--next a-link"]/div', prevEpisode: '//a[@class="o-sliblingNote__link o-sliblingNote__link--prev a-link"]/div', disableSnapWhenPageIsClicked: 1, author: '//div[@class="o-noteContentHeader__name"]/a', }, { // コミックアース・スター url: '//www.comic-earthstar.jp/', disableSnapWhenPageIsClicked: 1, author: '//section[@id="comic_info"]/span[@class="title_span"]', firstEpisode: '//li[last()]/span/a[@class="on_m readbtn2"]', lastEpisode: '//td/a[@class="new_read_btn"]', }, { // url: '//comic-walker.com/', disableSnapWhenPageIsClicked: 1, firstEpisode: '//ul[@class="acBacknumber-list first-preview clearfix"]/li[1]/a[@target="_self"]', lastEpisode: '//div[@class="container"]/div/p[@class="btn-detailLink link-p"]/a', //leftKey:'//div[last()]/div[@role="button" and text()="キャンセル"]', //押せない }, { // url: '//webcomicgamma.takeshobo.co.jp/', disableSnapWhenPageIsClicked: 1, author: '//div[@class="name_intro_author"]', firstEpisode: '//div[@class="box_episode"]/div[last()]/div/a[contains(text(),"このエピソードを読む")]|//div[last()]/div[@class="box_episode_text"]/a[contains(text(),"このエピソードを読む")]', lastEpisode: '//a[contains(text(),"最新エピソードを読む")]|//div[1]/div[@class="box_episode_text"]/a[text()="このエピソードを読む"]', }, { // url: '//online.ichijinsha.co.jp/', disableSnapWhenPageIsClicked: 1, firstEpisode: '//li[last()]/ul/li/a[@class="pc"]', lastEpisode: '//div[contains(@class,"read")]/a[@class="pc corner"]', }, { // url: '//comic-meteor.jp/', author: '//div[@class="work_author_intro_name"]', firstEpisode: '//div[last()]/div/div[2]/a[text()="読む"]|//a[text()="第1話を読む"]', lastEpisode: '//a[text()="最新話を読む"]|//div[@class="latest_info_link_btn01"]/a', pankuzuUp: '//div[@class="topics d-none d-sm-block"]/ul/li[last()-1]/a|//div[@class="leaflet-inner"]/a[@alt="作品ページに戻る"]', }, { // url: '//yasudadou.futene.net/', sibling: '//tr', nextEpisode: '//a/img[@src="http://yasudadou.futene.net/kyoutuu4_next.png"]/..', prevEpisode: '//a/img[@src="http://yasudadou.futene.net/kyoutuu2_back.png"]/..', disableSnapWhenPageIsClicked: 1, }, { // url: '//curazy.com/', sibling: '//div/div/p/img/..', header: '//body/div[@id="page"]/header/div', nextEpisode: '//span[contains(text(),"次ページ:")]|//span[@class="curazy-link-btn__paging"]/i[@class="fa fa-arrow-circle-right"]', disableSnapWhenPageIsClicked: 1, }, { // url: '.yucl.net/', sibling: '//div[@class="clearfix"]/p/a/img/../..|//div[last()]/div[1]/figure/img/..', nextEpisode: '//div[@class="next-arrow"]/..', prevEpisode: '//div[@class="prev-arrow"]/..', lastEpisode: '//div[@class="clearfix"]/ul/li[1]/a|//li[1]/div/div[last()]/a', }, { // url: '//yusb.net/', sibling: '//p/img/..', nextEpisode: '//div[@class="next-arrow"]/..', prevEpisode: '//div[@class="prev-arrow"]/..', }, { // url: '//grapee.jp/', sibling: '//div[@class="image"]/img/..', disableSnapWhenPageIsClicked: 1, pankuzuUp: '//ul[@typeof="BreadcrumbList"]/li[last()-1]/*', }, { // url: '//arklightbooks.com/comics/', firstEpisode: '//dl[1]/dd/p[@class="arrow jp_bold"]/a', lastEpisode: '//dl[last()]/dd/p[@class="arrow jp_bold"]/a', }, { url: '//comic-boost.com/', firstEpisode: '//ul/li[last()]/div/ul/li/a[@class="button button_ico_cart" and contains(text(),"読む")]', lastEpisode: '//a[@class="button button_ico_cart" and contains(text(),"読む")]', author: '//div[@class="detail"]/p/a[@class="author_name"]', }, { url: '//futabanet.jp/', firstEpisode: '//div[last()]/a[@rel="noopener"]/span', lastEpisode: '//div[1]/a[@rel="noopener"]/span[2]', author: '//div[@class="detail-ex__writer"]', disableSnapWhenPageIsClicked: 1, }, { url: '//hobbyjapan.co.jp/', firstEpisode: '//ul[last()]/li[3]/a[@class="btn_readcomic"]', lastEpisode: '//div[@class="page_container series_detail"]/div/div[2]/ul[1]/li[3]/a', author: '//ul[@class="book_intro_list"]/li/a' }, { url: '//comicride.jp/', firstEpisode: '//div[@id="contents"]/div/div[1]/div[1]/a[@data-wpel-link="internal"]/img/..', lastEpisode: '//div[@id="main"]/div[1]/div[last()]/a/img', author: '//div[@id="nav"]/ul/li[1]' }, { url: '//www.comic-valkyrie.com/', firstEpisode: '//div[@class="box_wrap"]/div[last()]/div[@class="right"]/a[@class="read_bt" and text()="読む"]', lastEpisode: '//div[@id="new_story"]/div/a', author: '//div[@id="writer"]/p' }, { url: '//webcomic.ohtabooks.com/', firstEpisode: '//li[last()]/a[@class="btn icon arrow"]', lastEpisode: '//div[4]/ul/li[@class="wide"]/a', author: '//div/div[@class="author"]/span[@itemprop="name"]' }, { // url: '', sibling: '', header: '', nextEpisode: '', prevEpisode: '', disableSnapWhenPageIsClicked: 0, author: '', firstEpisode: '', lastEpisode: '', pankuzuUp: '', }, { // url: '', sibling: '', header: '', nextEpisode: '', prevEpisode: '', disableSnapWhenPageIsClicked: 0, author: '', firstEpisode: '', lastEpisode: '', pankuzuUp: '', }, /* { url: '', // 記述したいサイトのurlにマッチする正規表現 sibling: '', // めくりたいページ要素を指すXPath(/..等で親子階層を合わせることが必要) header: '', // ページ上部のピン留めされたヘッダ(スクロールにくっついてくる帯みたいなの)の要素を指すXPath nextEpisode: '', // Enterキーでクリックする次の話へのリンクを指すXPath prevEpisode: '', // ]キーでクリックする1つ前の話へのリンクを指すXPath atamadashi: '', // 頭出し機能true時に特定の要素にスクロールさせたい時のXPath disableSnapWhenPageIsClicked: 0, // 1にするとページ要素クリックでめくる機能を無効 author: '', // 漫画の作者名が書かれている要素を指すXPath firstEpisode: '', // 第1話を指すXPath lastEpisode: '', // 最新話を指すXPath pankuzuUp: '', // Shift+↑でクリックする要素(パンくずリストの1つ上)を指すXPath leftKey:'', // XPath 画面内にこの要素が入っていたら左キーでそれをクリック 最後のページまで行かないと次話ボタンが出ないサイトなどで使用 rightKey:'', // XPath 画面内にこの要素が入っていたら右キーでそれをクリック 最後のページまで行かないと次話ボタンが出ないサイトなどで使用 }, */ ] var marginu = 3; var isChrome = window.navigator.userAgent.toLowerCase().indexOf("chrome") != -1; var scrollSpeed = pref("scrollSpeed") || (isChrome ? 1.5 : 1.5); var atamadashi = pref("atamadashi") || "false"; var sscrollY = 0; var sscrollDY = 0; var scrint = 0; // match文を生成 if (LogMatch) { let matchlist = "" for (let s of SITEINFO.slice().sort(function(a, b) { return a.url > b.url ? 1 : -1 })) { if (s.url != "") for (let s2 of s.url.split("|")) { matchlist += "// @match *:" + s2.replace(/\.\*/gm, "*").replace(/^\./, "//*.") + "*\n"; } } alert(matchlist); } var customsib = pref("wcs_siblingXPath") || ""; if (customsib) { SITEINFO.length = 0; SITEINFO.push({ "url": "//" + location.href.match(/^https?:\/{2,}(.*?)(?:\/|\?|#|$)/)[1] + "/", "sibling": customsib, "disableSnapWhenPageIsClicked": 1 }) } /*else { // サイト側で対応(作りかけ) let keys = ["sibling", "header", "nextEpisode", "prevEpisode", "atamadashi", "author", "firstEpisode", "lastEpisode", "pankuzuUp"]; if (elegeta("//*[@class='wcs_sibling']|//*[@class='wcs_header']|//*[@class='wcs_nextEpisode']|//*[@class='wcs_prevEpisode']|//*[@class='wcs_atamadashi']|//*[@class='wcs_author']|//*[@class='wcs_firstEpisode']|//*[@class='wcs_lastEpisode']|//*[@class='wcs_pankuzuUp']").length) { SITEINFO.length = 0; for (let key of keys) { if (eleget0("//*[@class='wcs_" + key + "']")) { SITEINFO[0].url = "//" + location.href.match(/^https?:\/{2,}(.*?)(?:\/|\?|#|$)/)[1] + "/"; SITEINFO[0][key] = "//*[@class='wcs_" + key + "']"; SITEINFO[0].disableSnapWhenPageIsClicked = 0; } } } } */ document.addEventListener('keydown', function f(e) { if (e.target.tagName != 'INPUT' && e.target.tagName != 'TEXTAREA' && e.target.getAttribute('contenteditable') != 'true') { if (!e.getModifierState("Alt") && !e.getModifierState("Control") && e.getModifierState("Shift") && (e.key == "\`")) { // e.preventDefault(); var copipe = customsib ? "現在の設定:\n\n// @match *://" + location.href.match(/^https?:\/{2,}(.*?)(?:\/|\?|#|$)/)[1] + "/*\n { // \n url: '//" + location.href.match(/^https?:\/{2,}(.*?)(?:\/|\?|#|$)/)[1] + "/',\n sibling: '" + customsib + "',\n header: '',\n nextEpisode: '',\n prevEpisode: '',\n disableSnapWhenPageIsClicked: 1,\n author: '',\n firstEpisode: '',\n lastEpisode: '',\n pankuzuUp: '',\n },\n\n" : ""; //console.log("livedoor:" + (document.body.innerHTML.match(/\livedoor\./gmi) || [1]).length + " @class=t_H:" + elegeta('//div[contains(@class,"t_h")]').length); let defsib = ((document.body.innerHTML.match(/\livedoor\./gmi) || [1]).length >= 5 && elegeta('//div[contains(@class,"t_h")]').length > 4) ? '//div[contains(@class,"t_h")]' : ''; var sib = prompt(copipe + "Enter Sibling XPath\n空欄にすると設定を削除します", customsib || defsib); pref("wcs_siblingXPath", null); if (!sib || !eleget0test(sib)) { alert("空欄、またはXPathとして1つ以上ヒットしないので、設定を削除します"); } else { pref("wcs_siblingXPath", sib); } location.reload(); return; } } }, false); $('a[target="_blank"]').removeAttr("target"); setTimeout(() => $('a[target="_blank"]').removeAttr("target"), 500); setTimeout(() => $('a[target="_blank"]').removeAttr("target"), 1500); var thissite = null; // for(let si of SITEINFO){for (let pro in si){if(si[pro])console.log(pro+" : "+si[pro])}} for (var i = 0; i < SITEINFO.length; i++) { if (SITEINFO[i].url == "") continue; if (location.href.match(SITEINFO[i].url)) { thissite = i; var SITE = Object.create(SITEINFO[thissite]); break; } } if (thissite === null) return; setTimeout(() => { var j = 0; for (let pro in SITE) { if (SITE[pro]) { //console.log(pro + " : " + SITE[pro]) var str1 = ["url:", "sibling:", "sibling:", "header:", "nextEpisode:", "prevEpisode:", "disableSnapWhenPageIsClicked:", "author:", "firstEpisode:", "lastEpisode:", "pankuzuUp:"]; var str2 = ["", "←→:前次ページ", "Shift+A:頭出し", "", "Enter:次の話", "]:前の話", "", "", "→:第1話", "Enter:最新話", "Shift+↑:上階層"]; for (var k = 0; k < str1.length; k++) { if (pro + ":" == str1[k] && str2[k] && eleget0(SITE[pro])) { if (PopupHelpMS) { let node = document.createElement('span'); node.className = "ignoreMe"; node.innerHTML = str2[k]; //+" : "+SITE[pro]; node.setAttribute("style", "max-width:95%; right:0; bottom:" + (j * 21) + "px; z-index:2147483647; opacity:" + 1 + "; text-align:left; line-height:1.1; position:fixed; font-size:11px; font-weight:bold; margin:2px; text-decoration:none; padding:2px 5px; border-radius:15px; color:#ffffff; " + (ButtonBG)); //" box-shadow:3px 3px 3px #0004;"); document.body.appendChild(node) $(node).hide(0); setTimeout(() => { $(node).slideDown('fast'); }, 67 * j); //fadeIn('fast') setTimeout(() => { $(node).hide(400).queue(function() { this.remove(); }) }, PopupHelpMS + 67 * j); //fadeOut('fast') } j++; } } } } addHelp(SITE.firstEpisode, "→"); addHelp(SITE.lastEpisode, "Enter"); addHelp(SITE.prevEpisode, " ] "); addHelp(SITE.nextEpisode, "Enter"); if (SITE.nextEpisode > "") { var ele = eleget0(SITE.nextEpisode); if (ele && ele.tagName === "A") { $("head").append("").append(""); //.append("") } } addHelp(SITE.pankuzuUp, "Shift+↑"); }, (SITE.delay || 0) + 500); if (SITE.leftKey) { var leftArrowTimer = setInterval(() => { var ele = eleget0(SITE.leftKey); if (isinscreen(ele) && !ele.innerText.match(/ \(←\)/)) { ele.innerText += " (←)"; } }, 500); } function getArrowedGap() { // ヘッダのy下端を計算 var arrowedGap = marginu; if (SITE.header) { var seigaheader = eleget0(SITE.header); if (seigaheader) { var tmp = seigaheader.getBoundingClientRect().bottom; // - window.pageYOffset // console.log(tmp); if (seigaheader && tmp >= 0) { var arrowedGap = marginu + tmp; // console.log("ヘッダあり");//+window.pageYOffset; } } } dc("arrowedGap:" + arrowedGap); // console.log("ArrowedGap:"+arrowedGap+"\nMarginU:"+ marginu+"\nseigaH:"+seigaheader.getBoundingClientRect().bottom,"\noffset:"+window.pageYOffset); return arrowedGap; } if (SITE.registFunc) SITE.registFunc(); //console.log(SITE) document.addEventListener("keydown", function(e) { if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA' || e.target.getAttribute('contenteditable') === 'true') return; var arrowedGap = getArrowedGap(); var pressed = (e.ctrlKey ? 'c' : '') + (e.altKey ? 'a' : '') + (e.shiftKey ? 's' : '') + String(e.which); { if (SITE.pankuzuUp && pressed == "s38") { if (moveClick(SITE.pankuzuUp)) { e.preventDefault(); return; } // Shift上 } if (SITE.leftKey && pressed == "37") { var e = eleget0(SITE.leftKey); if (e && isinscreen(e)) { moveClick(SITE.leftKey, ""); return; } } if (SITE.rightKey && pressed == "39") { var e = eleget0(SITE.rightKey); if (e && isinscreen(e)) { moveClick(SITE.rightKey, ""); return; } } if (SITE.sibling && (pressed == "39" || pressed == "37") && eleget0test(SITE.sibling)) { //左右 e.preventDefault(); // もっとも接近しているページ=今見ているページをfoundeleに入れる var ele = eleget(SITE.sibling); var minGap = 9999; var foundele = null; var nh = getCurrentHeaderHeight(); for (var i = 0; i < ele.snapshotLength; i++) { var ele0 = ele.snapshotItem(i); var eley = ele0.getBoundingClientRect().top - nh - marginu; if (Math.abs(eley) < minGap && ($(ele0).is(":visible"))) { minGap = Math.abs(eley); foundele = ele0; if (minGap <= (arrowedGap - nh + marginu + 2)) { dc("nearest:" + foundele.tagName + "." + foundele.className + "#" + foundele.id + "\n" + "minGap:" + minGap + " aGap:" + (arrowedGap - nh + marginu) + " break at " + i); break; } } } snap(foundele, pressed == 37 ? "prev" : "next", arrowedGap, SITE.sibling); return; } if (SITE.nextEpisode && (pressed == "s39" || pressed == "13")) // Shift右 enter if (moveClick(SITE.nextEpisode)) { e.preventDefault(); if (SITE.funcNextPrev) SITE.funcNextPrev(); return; } if (SITE.prevEpisode && (pressed == "s37" || pressed == "221")) if (moveClick(SITE.prevEpisode)) { e.preventDefault(); if (SITE.funcNextPrev) SITE.funcNextPrev(); return; } //Shift左 ] if (SITE.firstEpisode && pressed == "39") if (moveClick(SITE.firstEpisode)) { e.preventDefault(); return; } // 右 if (SITE.lastEpisode && (pressed == "s39" || pressed == "13")) if (moveClick(SITE.lastEpisode)) { e.preventDefault(); return; } // Shift右 enter if (pressed == "s83") { // shift+s スクロール速度 e.preventDefault(); scrollSpeed = proInput("スクロール速度を入力してください(0:API使用、1:瞬間移動、1.01~:速度指定)", scrollSpeed, 0, 30); pref("scrollSpeed", scrollSpeed); } if (pressed == "s65") { // Shift+a 頭出しオンオフ e.preventDefault(); atamadashi = atamadashi === "true" ? "false" : "true"; alert("[Shift+a] 頭出し機能を" + atamadashi + "にしました"); pref("atamadashi", atamadashi); } if (location.href.match("/seiga.nicovideo.jp/watch/|//seiga.nicovideo.jp/comic/")) { if (pressed == "67") { // c コメントオンオフ e.preventDefault(); eleget0('//li[@id="show_comment"]/span').click(); return; } if (pressed == "72") { // h:: ヘッダー固定追従 e.preventDefault(); //eleget0('//span[text()="ヘッダー追従"]|//li[@id="siteHeaderRightMenuUnfix" and @style="display: block;"]/a/span|//li[@id="siteHeaderRightMenuFix" and @style="display: block;"]/a/span').click(); eleget0('//label[@for="commonHeaderFixedSwitch"]').click(); return; } } if (pressed == "70" || pressed == "219") { // f:: [:: 全画面化 e.preventDefault(); var y = window.pageYOffset; if (!document.fullscreenElement) { let p = document.documentElement.requestFullscreen(); p.catch(() => {}) } else { if (document.exitFullscreen) { let p = document.exitFullscreen(); p.catch(() => {}) } } setTimeout(window.scroll, 100, 0, y); return false; } if (SITE.nextPage && pressed == "37" && eleget0test(SITE.nextPage)) if (moveClick(SITE.nextPage)) { e.preventDefault(); return; } if (SITE.prevPage && pressed == "39" && eleget0test(SITE.prevPage)) if (moveClick(SITE.prevPage)) { e.preventDefault(); return; } } }, false); // ページクリックでスナップ if (!SITE.disableSnapWhenPageIsClicked && SITE.sibling) { setTimeout(() => { var ele = eleget(SITE.sibling); for (var i = ele.snapshotLength; i--;) ele.snapshotItem(i).addEventListener("click", function(e) { snap(this, "next", getArrowedGap(), SITE.sibling); }, false); }, 500); } // 作者名でWeb漫画アンテナ if (SITE.author) { appendlinktoAuthor(); var observeUrlHasChangedhref = location.href; var observeUrlHasChanged = new MutationObserver(mutations => { if (observeUrlHasChangedhref !== location.href) setTimeout(() => { appendlinktoAuthor(); observeUrlHasChangedhref = location.href; }, 3500) }); observeUrlHasChanged.observe(document, { childList: true, subtree: true }); document.body.addEventListener('AutoPagerize_DOMNodeInserted', function(evt) { sakushaantenna(evt.target) }, false); function appendlinktoAuthor() { setTimeout(() => { sakushaantenna(document) }, 500 + (SITE.delay || 0)); } } // 頭出し if (atamadashi == "true" && SITE.atamadashi) { setTimeout(() => { loadfocus(0, SITE.atamadashi) }, 16) setTimeout(() => { loadfocus(0, SITE.atamadashi) }, 600) } else if (atamadashi == "true" && SITE.sibling) { setTimeout(() => { loadfocus(0, SITE.sibling) }, 16) setTimeout(() => { loadfocus(0, SITE.sibling) }, SITE.atamadashiDelay || 333) } if (SITE.func) { SITE.func(); } return; function sakushaantenna(node) { elegeta('//a[@class="sakushaantenna"]', node).forEach(e => e.remove()); for (let ele of elegeta(SITE.author, node)) { // let author = ele.innerText.replace(/\/|/|\,/gmi, " OR ").replace(/原作|作画|著者\s:| ?先生[::\//・]?|原作[::\//・]|原案[::\//・]|脚本[::\//・]|著[::\//・]|著者[::\//・]|漫画[::\//・]|作画[::\//・]|イラスト[::\//・]|キャラクター(原案)?[::\//・]|画[::\//・]|作[::\//・]|絵[::\//・]|構成[::\//・]|協力[::\//・]|[::・]|[\((][^)\)]*[)\)]|=/gmi, " ").replace(/ |・| /g, " ").replace(/^ OR | OR $/gmi, "").trim(); let author = ele.innerText.replace(/\/|/|\,/gmi, " OR ").replace(/作者|原作|作画|著者\s:| ?先生[::\//・]?|原作[::\//・]|原案[::\//・]|脚本[::\//・]|著[::\//・]|著者[::\//・]|漫画[::\//・]|作画[::\//・]|イラスト[::\//・]|キャラクター(原案)?[::\//・]|画[::\//・]|作[::\//・]|絵[::\//・]|構成[::\//・]|協力[::\//・]|[::・]|[\((][^)\)]*[)\)]|=/gmi, " ").replace(/ |・| /g, " ").replace(/^ OR | OR $/gmi, "").trim(); let pixiv = Math.random() > 0.5 ? 'https://www.google.co.jp/search?btnI=I%27m+Feeling+Lucky&q=' + author + "+site:www.pixiv.net" : 'https://duckduckgo.com/?q=!ducky+' + author + " site:www.pixiv.net"; let link = $('Web漫画アンテナ'.replace("***", author)) link.insertAfter(ele); link.on("contextmenu", () => { window.open(pixiv); return false; }); } } function loadfocus(times = 0, atamadashi) { let xp = atamadashi; if (!xp || times > 10000) return false; if (eleget0(xp)) { setTimeout(() => { loadfocus2(atamadashi); }, 100); return; } else setTimeout(() => { loadfocus(times + 100, atamadashi); }, 100) } function loadfocus2(atamadashi) { var xp = atamadashi; var ele = eleget0(xp); if (ele) { sscroll(ele.getBoundingClientRect().top + window.pageYOffset - marginu - getCurrentHeaderHeight()); } return ele; } function getNextSib(ele, xpath) { // xpathに適合する弟ノードを走査 do { if (!ele.nextElementSibling) return null; ele = ele.nextElementSibling; if ($(ele).is(":visible")) { for (let ele2 of elegeta(xpath)) { if (ele === ele2) return ele; } } } while (ele.nextElementSibling); return null; } function getPrevSib(ele, xpath) { // xpathに適合する兄ノードを走査 do { if (!ele.previousElementSibling) return null; ele = ele.previousElementSibling; if ($(ele).is(":visible")) { for (let ele2 of elegeta(xpath)) { if (ele === ele2) return ele; } } } while (ele.previousElementSibling); return null; } function snap(targetele, pn, arrowedGap, xpath) { if (!targetele) return; var headery = getCurrentHeaderHeight(); var nowpagey = targetele.getBoundingClientRect().top + window.pageYOffset - marginu; var nextpage = (pn == "next" ? getNextSib(targetele, xpath) : getPrevSib(targetele, xpath)); if (nextpage) dc("nextpage:" + nextpage.tagName + "." + nextpage.className + "#" + nextpage.id); if (nextpage == null) { if (SITE.nextEpisode) if (eleget0(SITE.nextEpisode)) { var nextpagey = eleMiddleY(SITE.nextEpisode); } else return; else return; } else { var nextpagey = nextpage.getBoundingClientRect().top + window.pageYOffset - marginu; dc("nextpagey:" + nextpagey); } if (nextpage === null && pn == "prev") { nextpagey = 0; nowpagey = 0; if (window.pageYOffset < 2) { if (SITE.prevEpisode) { moveClick(SITE.prevEpisode); if (SITE.funcNextPrev) SITE.funcNextPrev(); } } } var nowy = window.pageYOffset + headery; dc(Math.abs(nowy - nowpagey) + " present gap"); dc(arrowedGap + " allowed gap"); if (Math.abs(nowy - nowpagey) <= arrowedGap) { sscroll(nextpagey - headery); if (nextpage === null) { if (pn == "next") { if (SITE.nextEpisode) { moveClick(SITE.nextEpisode); if (SITE.funcNextPrev) SITE.funcNextPrev(); } } } } else { targetele.focus(); sscroll(nowpagey - headery); } return; } function getCurrentHeaderHeight() { if (!SITE.header) { return marginu; } var headerY = 0; elegeta(SITE.header).forEach(e => { if (e.getBoundingClientRect().bottom > headerY) headerY = e.getBoundingClientRect().bottom; }); return headerY + marginu; } function eleMiddleY(xpath) { var el2 = eleget0(xpath); if (el2) { return (el2.getBoundingClientRect().top + window.pageYOffset + eleget0(xpath).getBoundingClientRect().height - window.innerHeight / 2); } else return 0; } function moveClick(xpath, command = "scrollCenter") { let ele = eleget0(xpath); //if (!ele || ele.offsetHeight == 0) return false; // 不可視要素ならやらない if (!ele) return false; // 不可視要素でもやる sukimaでは必要 GM_addStyle(":focus { box-shadow: 0px 0px 10px 10px rgba(0, 250, 0, 0.5), inset 0 0 100px rgba(0, 250, 0, 0.1) !important; outline: rgba(0, 250,0,0.7) solid 4px !important; outline-offset: 1px !important; }") ele.focus(); if (SITE.moveEpisodeFunc) { // mangazのためだけの処理 SITE.moveEpisodeFunc(ele); } else { ele.click(); } if (command.indexOf("scrollCenter") !== -1) scroll(eleMiddleY(xpath)); return true; } function eleget0(xpath) { var ele = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var array = []; for (var i = 0; i < ele.snapshotLength; i++) { let e = ele.snapshotItem(i); return e; // sukimaでは不可視要素でもクリックする必要がある //if (e.offsetHeight) return e; } return null; //return ele.snapshotLength > 0 ? ele.snapshotItem(0) : null; //return array.length > 0 ? array[0] : null; } function eleget(xpath) { return document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); } function elegeta(xpath, node = document) { var ele = document.evaluate("." + xpath, node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var array = []; let l = ele.snapshotLength; for (var i = 0; i < l; i++) array[i] = ele.snapshotItem(i); // sukimaでは不可視要素でも押す return array; } function sscroll(dy) { if (scrollSpeed < 1) { //APIでスクロール // console.log("api使用"); window.scroll({ left: 0, top: dy, behavior: "smooth" }); return; } if (scrollSpeed == 1) { window.scroll({ left: 0, top: dy, behavior: "instant" }); return; } sscrollY = window.pageYOffset; //chrome sscrollDY = dy; scrint = 0; setTimeout(sscrollInt, 16); return; } function sscrollInt() { scrint++; sscrollY = sscrollY + (sscrollDY - sscrollY) / scrollSpeed; window.scroll(0, sscrollY); // if (Math.abs(sscrollY - sscrollDY) > 2) setTimeout(sscrollInt, 16); if (Math.abs(sscrollY - sscrollDY) >= 1) { setTimeout(sscrollInt, 16); } else window.scroll(0, sscrollDY); // else console.log("スクロールに掛かった回数(最短1/60秒)…" + scrint + "回"); return; } function proInput(prom, defaultval, min, max = Number.MAX_SAFE_INTEGER) { return Math.min(Math.max( Number(window.prompt(prom, defaultval).replace(/[A-Za-z0-9.]/g, function(s) { return String.fromCharCode(s.charCodeAt(0) - 65248); }).replace(/[^-^0-9^\.]/g, "")), min), max); } function addHelp(xpath, help) { if (!xpath) return; let ele = eleget0(xpath); if (ele) { ele.appendChild(document.createElement("span")).innerHTML = " (" + help + ")"; //console.log("Found:" + xpath); } return; } function eleget0test(xpath) { try { var ele = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null) } catch (err) { return ""; } var ele = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); return ele.snapshotLength > 0 ? ele.snapshotItem(0) : ""; } function dc(str) { if (debug) console.log(str); } function pref(name, store = undefined) { // pref(name,data)で書き込み(数値でも文字列でも配列でもオブジェクトでも可)、pref(name)で読み出し var domain = (location.href.match(/^https?:\/{2,}(.*?)(?:\/|\?|#|$)/)[1] || location.href); if (store === undefined) { // 読み出し let data = GM_getValue(domain + " ::: " + name) if (data == undefined) return store; // 値がないなら終わり if (data.substr(0, 1) === "[") { // 配列なのでJSONで返す try { return JSON.parse(data || '[]'); } catch (e) { console.log("データベースがバグってるのでクリアします\n" + e); pref(name, []); return; } } else return data; } if (store === "" || store === [] || store === null) { // 書き込み、削除 GM_deleteValue(domain + " ::: " + name); return store; } else if (typeof store === "string") { // 書き込み、文字列 GM_setValue(domain + " ::: " + name, store); return store; } else { // 書き込み、配列 try { GM_setValue(domain + " ::: " + name, JSON.stringify(store)); } catch (e) { console.log("データベースがバグってるのでクリアします\n" + e); pref(name, ""); } return store; } } function isinscreen(ele, wait = "nowait") { // if (!ele || (wait == "wait" && $(eleget0('//span[@class="loading-text"]')).is(":visible"))) return 0; if (!ele) return; var eler = ele.getBoundingClientRect(); return (eler.top > 0 && eler.left > 0 && eler.left < window.parent.screen.width && eler.top < window.parent.screen.height) && ele.offsetHeight; } })();