@@ -73,26 +73,71 @@ export function createContext(scriptRes: ScriptRunResouce, GMInfo: any, envPrefi
7373 window : { } ,
7474 } ;
7575 if ( scriptRes . metadata . grant ) {
76+ const GM_cookie = function ( action : string ) {
77+ let default_details : GMTypes . CookieDetails = {
78+ url : window . location . href ,
79+ } ;
80+ return (
81+ details : GMTypes . CookieDetails ,
82+ done : ( cookie : GMTypes . Cookie [ ] | any , error : any | undefined ) => void
83+ ) => {
84+ let queryDetails = { ...default_details , ...details } ;
85+ return context [ "GM_cookie" ] ( action , queryDetails , done ) ;
86+ } ;
87+ } ;
7688 scriptRes . metadata . grant . forEach ( ( val ) => {
7789 const api = GMContext . apis . get ( val ) ;
7890 if ( ! api ) {
7991 return ;
8092 }
8193 if ( / ^ ( G M | w i n d o w ) \. / . test ( val ) ) {
8294 const [ n , t ] = val . split ( "." ) ;
83- ( < { [ key : string ] : any } > context [ n ] ) [ t ] = api . api . bind ( context ) ;
95+ if ( t === "cookie" ) {
96+ context [ n ] [ t ] = {
97+ list ( details : GMTypes . CookieDetails = { } ) {
98+ return new Promise ( ( resolve , reject ) => {
99+ let fn = GM_cookie ( "list" ) ;
100+ fn ( details , function ( cookie , error ) {
101+ if ( error ) {
102+ reject ( error ) ;
103+ } else {
104+ resolve ( cookie ) ;
105+ }
106+ } ) ;
107+ } ) ;
108+ } ,
109+ delete ( details : GMTypes . CookieDetails ) {
110+ return new Promise ( ( resolve , reject ) => {
111+ let fn = GM_cookie ( "delete" ) ;
112+ fn ( details , function ( cookie , error ) {
113+ if ( error ) {
114+ reject ( error ) ;
115+ } else {
116+ resolve ( cookie ) ;
117+ }
118+ } ) ;
119+ } ) ;
120+ } ,
121+ set ( details : GMTypes . CookieDetails ) {
122+ return new Promise ( ( resolve , reject ) => {
123+ let fn = GM_cookie ( "set" ) ;
124+ fn ( details , function ( cookie , error ) {
125+ if ( error ) {
126+ reject ( error ) ;
127+ } else {
128+ resolve ( cookie ) ;
129+ }
130+ } ) ;
131+ } ) ;
132+ } ,
133+ } ;
134+ } else {
135+ ( < { [ key : string ] : any } > context [ n ] ) [ t ] = api . api . bind ( context ) ;
136+ }
84137 } else if ( val === "GM_cookie" ) {
85138 // 特殊处理GM_cookie.list之类
86139 context [ val ] = api . api . bind ( context ) ;
87140
88- const GM_cookie = function ( action : string ) {
89- return (
90- details : GMTypes . CookieDetails ,
91- done : ( cookie : GMTypes . Cookie [ ] | any , error : any | undefined ) => void
92- ) => {
93- return context [ val ] ( action , details , done ) ;
94- } ;
95- } ;
96141 context [ val ] . list = GM_cookie ( "list" ) ;
97142 context [ val ] . delete = GM_cookie ( "delete" ) ;
98143 context [ val ] . set = GM_cookie ( "set" ) ;
0 commit comments