@@ -10,6 +10,7 @@ import {
1010 showNotification ,
1111 showPreviewOptions ,
1212 useStorage ,
13+ request ,
1314} from '@app/lib/help'
1415import { 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