Greasy Fork is available in English.

Pixiv Previewer

Display preview images (support single image, multiple images, moving images); Download animation(.zip); Sorting the search page by favorite count(and display it). Updated for the latest search page.

< Commentaires sur Pixiv Previewer

Question / commentaire

§
Posté le: 2020-09-22

搜索页有很大概率遇到无法进行排序的情况,同时不显示右下角齿轮图标,控制台一直输出:[Warning]Get toolbar failed.

§
Posté le: 2020-09-22

抽空看了下源码,发现了问题出在搜索页部分对url进行正则判断那里:

Pages[PageType.Search] = {
    PageTypeString: 'SearchPage',
    CheckUrl: function (url) {
        // 没有 /artworks 的页面不支持
        return /^https?:\/\/www.pixiv.net\/tags\/.*\/(artworks|illustrations|manga)/.test(url) ||
            /^https?:\/\/www.pixiv.net\/en\/tags\/.*\/(artworks|illustrations|manga)/.test(url);
    }

因为url多出了后缀"?s_mode=s_tag",所以导致正则不匹配. 因为我也不知道都有哪些参数,所以直接在后面加了".*",于是就正常了. 我看到脚本简介页面里的搜索页示例地址也有带这个后缀,是不是哪次代码更新的时候改了正则导致的?

ocrosoftAuteur
§
Posté le: 2020-09-22
Édité le: 2020-09-22

哇竟然还有人会看源码!
之前有更新改过正则,但是看前面说有很多"Get toolbar failed."的警告,那跟正则不一定有关系,上面贴出来的正则最后没有'$',是无视后面内容的。
(CheckUrl在第2873行调用,如果匹配失败,在2883行会直接退出,不会打印出2904行的警告)
如果会调试可以看一下出问题时,搜索页的GetToolBar函数执行情况,可能某些情况下页面多了一些元素,导致这个函数失败。
我这里换账号电脑都正常,也看不出什么原因,希望你能帮忙找一下原因,如果有问题也可以直接发邮件:ocrosoft#ocrosoft.com

§
Posté le: 2020-09-23

确实是因为装了其他的扩展在root节点下插入了第二个div,禁用后就正常了. 那个扩展在搜索页插入了9个元素,所以$(div[max_children_i]).children()返回的就是它. 不过为什么之前改了正则也能正常工作?😂️

PS:那个扩展是Powerful Pixiv Downloader.

ocrosoftAuteur
§
Posté le: 2020-09-23

了解,后续尝试兼容一下,毕竟懒得加下载功能,还是需要其他插件的。

§
Posté le: 2020-09-23
Édité le: 2020-09-23

我先给那个扩展提了issue,希望作者能添加一个设置项不插入这些节点.要是他改了你这里也就不需要改了.

不过我还是不懂为什么之前改了正则也能正常工作.😂️

§
Posté le: 2020-09-23

另外源码我也没全看,就是那个findToolbarCommon函数的实现感觉有点繁琐,应该有更简单的写法吧.
我js和jQuery也就会一点皮毛,试了下`return $('#root>div>div>ul').get(0);`选择器直接选中,似乎也能正常使用,而且不需要在意上面那个扩展了.

ocrosoftAuteur
§
Posté le: 2020-09-23

$('#root>div>div>ul').get(0);
上面这种做法相当于: $('#root').children('div').children('div').children('ul:first')
用了复杂的做法是为了更精确的找到那个ul,如果跟ul父节点平级的div也有一个ul子节点,那么就有可能会跑到那个div里面去。
不过也不是不行,大概率不会出现上面那种情况

Poster une réponse

Connectez-vous pour poster une réponse.