为 JavDB、JavBus、JavLibrary 这三个站点添加跳转在线观看的链接
同时我发现,javlibrary网站无论是否有资源promise请求返回的状态码都是200
导致Javlib按钮常亮绿色
我针对javlib网址搜到资源会跳转的特性,
给function xhr进行了修改
现在会优先判断是否是javlib,
javlib --> 判断请求后网页是否跳转:
跳转 --> 亮
不跳转 --> 不亮
其他网站 --> 正常根据状态码判断
以下是修改后的代码
function xhr(siteItem, targetLink, CODE) {
const xhrPromise = new Promise((resolve) => {
GM_xmlhttpRequest({
method: "GET",
url: targetLink,
onload: (response) => {
const isJavLibraryLink = /javlibrary/.test(targetLink); // 判断是否为 javlibrary 的链接
if (isJavLibraryLink) {
// 如果是 javlibrary 链接
if (response.status === 200 && response.finalUrl !== targetLink) {
// 如果请求成功且发生了跳转
resolve({
isSuccess: true,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: "[get],存在资源",
});
} else {
// 如果请求失败或者没有跳转
resolve({
isSuccess: false,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: "应该是没有资源",
});
}
} else {
// 如果不是 javlibrary 链接
if (siteItem.fetcher === "get") {
if (response.status === 404) {
resolve({
isSuccess: false,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: "应该是没有资源",
});
} else {
const { hasSubtitle, hasLeakage, isSuccess } = videoPageParser(
response.responseText,
siteItem.domQuery,
);
resolve({
isSuccess,
targetLink,
hasSubtitle,
hasLeakage,
msg: "[get],存在资源",
});
}
} else if (siteItem.fetcher === "parser") {
const {
targetLink: targetLink2,
isSuccess,
hasLeakage,
hasSubtitle,
} = serachPageParser(response.responseText, siteItem.domQuery, siteItem.hostname, CODE);
resolve({
isSuccess,
targetLink: isSuccess ? targetLink2 : targetLink2,
hasSubtitle,
hasLeakage,
msg: "[parser]存在资源",
});
}
}},
onerror: (error) => {
resolve({
isSuccess: false,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: error.error,
});
},
});
});
return xhrPromise;
}
(不太会用markdown,重新编制了下。。救命:X)
同时我发现,javlibrary网站无论是否有资源promise请求返回的状态码都是200
导致Javlib按钮常亮绿色
我针对javlib网址搜到资源会跳转的特性,
给function xhr进行了修改
现在会优先判断是否是javlib,
javlib --> 判断请求后网页是否跳转:
跳转 --> 亮
不跳转 --> 不亮
其他网站 --> 正常根据状态码判断
以下是修改后的代码
function xhr(siteItem, targetLink, CODE) {
const xhrPromise = new Promise((resolve) => {
GM_xmlhttpRequest({
method: "GET",
url: targetLink,
onload: (response) => {
const isJavLibraryLink = /javlibrary/.test(targetLink); // 判断是否为 javlibrary 的链接
if (isJavLibraryLink) {
// 如果是 javlibrary 链接
if (response.status === 200 && response.finalUrl !== targetLink) {
// 如果请求成功且发生了跳转
resolve({
isSuccess: true,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: "[get],存在资源",
});
} else {
// 如果请求失败或者没有跳转
resolve({
isSuccess: false,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: "应该是没有资源",
});
}
} else {
// 如果不是 javlibrary 链接
if (siteItem.fetcher === "get") {
if (response.status === 404) {
resolve({
isSuccess: false,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: "应该是没有资源",
});
} else {
const { hasSubtitle, hasLeakage, isSuccess } = videoPageParser(
response.responseText,
siteItem.domQuery,
);
resolve({
isSuccess,
targetLink,
hasSubtitle,
hasLeakage,
msg: "[get],存在资源",
});
}
} else if (siteItem.fetcher === "parser") {
const {
targetLink: targetLink2,
isSuccess,
hasLeakage,
hasSubtitle,
} = serachPageParser(response.responseText, siteItem.domQuery, siteItem.hostname, CODE);
resolve({
isSuccess,
targetLink: isSuccess ? targetLink2 : targetLink2,
hasSubtitle,
hasLeakage,
msg: "[parser]存在资源",
});
}
}},
onerror: (error) => {
resolve({
isSuccess: false,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: error.error,
});
},
});
});
return xhrPromise;
}
我的代码有个bug,
当搜索关键词为MIDE-077或某些个别番号时,会出现多个结果。
这样就不会跳转,便无法检测。
现在根据页面是否出现div.titlebox
搜索提示框(只有在没有搜到或者输入了无法识别的东西才会出现)
而正确的跳转,或者出现多个结果都不会出现该元素
更新后的代码:
function xhr(siteItem, targetLink, CODE) {
const xhrPromise = new Promise((resolve) = >{
GM_xmlhttpRequest({
method: "GET",
url: targetLink,
onload: (response) = >{
if (/^https:\/\/www\.javlibrary\.com/.test(targetLink)) {
if (/<div class="titlebox">/.test(response.responseText)) {
resolve({
isSuccess: false,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: "应该是没有资源",
});
} else {
resolve({
isSuccess: true,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: "[parser]存在资源",
});
}
} else {
if (siteItem.fetcher === "get") {
if (response.status === 404) {
resolve({
isSuccess: false,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: "应该是没有资源",
});
} else {
const {
hasSubtitle,
hasLeakage,
isSuccess
} = videoPageParser(response.responseText, siteItem.domQuery, );
resolve({
isSuccess,
targetLink,
hasSubtitle,
hasLeakage,
msg: "[get],存在资源",
});
}
} else if (siteItem.fetcher === "parser") {
const {
targetLink: targetLink2,
isSuccess,
hasLeakage,
hasSubtitle,
} = serachPageParser(response.responseText, siteItem.domQuery, siteItem.hostname, CODE);
resolve({
isSuccess,
targetLink: isSuccess ? targetLink2: targetLink2,
hasSubtitle,
hasLeakage,
msg: "[parser]存在资源",
});
}
}
},
onerror: (error) = >{
resolve({
isSuccess: false,
targetLink,
hasSubtitle: false,
hasLeakage: false,
msg: error.error,
});
},
});
});
return xhrPromise;
}
再补充个bug,
在Javlibrary.com中,网页不会自动隐藏Javlib的按钮,
修复方式,将以下这段代码中的
disableHostname: "javlibrary" ↓更改↓
disableHostname: "javlib"
{
name: "JAVLib",
disableHostname: "javlibrary",
disable: false,
hostname: "javlibrary.com",
url: "https://www.javlibrary.com/cn/vl_searchbyid.php?keyword={{code}}",
fetcher: "get",
domQuery: {},
method: print,
}
感谢反馈,已更改在 1.1.8 版本中
[spaceCode 问题] 没测,按你的改了
当时想着 javlib 应该是都有的,反正绿就行了,就没有特别的去适配。 还有一个原因就是,他这个经常搜出来大于一个结果以上,我也不知道该返回哪个。 我现在给他写上 domQuery 了,不知道行不行。
[javlib 不跳过自己] 我搞错了,两边 name 没匹配上。按你的改了
后续我把代码开源吧,这个代码多少带点编译
大佬,GGJav似乎有了些改动。 这里的spaceCode替换"-"为" " 不再适用。 搜索必须精确到添加"-" 修改成false或者删除就能正常使用了。