Skip to content

Commit 7698f5d

Browse files
committed
修复今日热榜cookie不生效问题
1 parent 25eebfa commit 7698f5d

File tree

2 files changed

+756
-19
lines changed

2 files changed

+756
-19
lines changed

src/scripts/newsTop.tsx

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
showNotification,
1111
showPreviewOptions,
1212
useStorage,
13+
request,
1314
} from '@app/lib/help'
1415
import {FC} from 'react'
1516

@@ -45,6 +46,9 @@ interface PageInfo {
4546
/**文章列表*/
4647
articleList: ArticleInfo[]
4748

49+
/**cookie*/
50+
cookie: string | null
51+
4852
/**js执行的错误信息*/
4953
err: Error
5054
}
@@ -325,7 +329,7 @@ class NewsTop {
325329
async showMenu() {
326330
const selectIndex = await showActionSheet({
327331
title: '菜单',
328-
itemList: ['使用其他排行榜', '设置颜色', '设置透明背景', '预览组件'],
332+
itemList: ['使用其他排行榜', '设置颜色', '设置透明背景', '预览组件', '优化体验'],
329333
})
330334
switch (selectIndex) {
331335
case 0:
@@ -367,19 +371,45 @@ class NewsTop {
367371
case 3:
368372
await showPreviewOptions(this.render.bind(this))
369373
break
374+
case 4:
375+
const {cancel: cancelLogin} = await showModal({
376+
title: '优化体验建议',
377+
content:
378+
'本组件数据来源于 tophub.today 这个网站,未登录状态获取的文章链接不是最终链接,有二次跳转,如果想获取真实链接,建议在此登录该网站。\n\n登录完成后,自行关闭网页',
379+
confirmText: '去登录',
380+
})
381+
if (cancelLogin) return
382+
const loginUrl = 'https://tophub.today/login'
383+
const html = await new Request(loginUrl).loadString()
384+
await WebView.loadHTML(html, loginUrl, undefined, true)
385+
break
370386
}
371387
}
372388

373389
// 获取热榜数据
374390
async getNewsTop(url: string): Promise<PageInfo> {
391+
const cookieHeader: Record<string, string> = isLaunchInsideApp() ? {} : {cookie: getStorage<string>('cookie') || ''}
392+
const html =
393+
(
394+
await request<string>({
395+
url,
396+
dataType: 'text',
397+
header: {
398+
'user-agent':
399+
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1',
400+
...cookieHeader,
401+
},
402+
})
403+
).data || ''
375404
const webview = new WebView()
376-
await webview.loadURL(url)
405+
await webview.loadHTML(html, url)
377406
await webview.waitForLoad()
378-
const {title = '今日热榜', logo = 'flame.fill', articleList = [], err} = (await webview.evaluateJavaScript(
407+
const {title = '今日热榜', logo = 'flame.fill', articleList = [], cookie, err} = (await webview.evaluateJavaScript(
379408
`
380409
let title = ''
381410
let logo = ''
382411
let articleList = []
412+
let cookie = document.cookie
383413
let err = ''
384414
try {
385415
title = document.title.split(' ')[0]
@@ -394,11 +424,12 @@ class NewsTop {
394424
} catch(err) {
395425
err = err
396426
}
397-
Object.assign({}, {title, logo, articleList, err})
427+
Object.assign({}, {title, logo, articleList, cookie, err})
398428
`,
399429
)) as PageInfo
400430
err && console.warn(`热榜获取出错: ${err}`)
401-
return {title, logo, articleList, err}
431+
if (isLaunchInsideApp() && cookie) setStorage('cookie', cookie)
432+
return {title, logo, articleList, cookie, err}
402433
}
403434

404435
// 获取要显示的榜单 url

0 commit comments

Comments
 (0)