@@ -31,15 +31,7 @@ export class ChromeExtensionService {
31
31
return tab ;
32
32
}
33
33
34
-
35
- getMetaTitle = ( ) => {
36
-
37
- }
38
-
39
-
40
-
41
34
/**
42
- * TODO: finish this, get title, charset, og: and dc: tags
43
35
* @param tab
44
36
*/
45
37
async getMetadata ( tab : ChromeTab ) {
@@ -73,67 +65,41 @@ export class ChromeExtensionService {
73
65
74
66
try {
75
67
let result ;
76
- console . log ( 'Trying to get metatags...' ) ;
77
68
[ { result} ] = await chrome . scripting . executeScript ( {
78
69
target : { tabId : tab . id } ,
79
70
function : ( ) => {
80
- let meta = document . getElementsByTagName ( 'meta' ) ;
81
-
82
- console . log ( 'meta tags: ' , meta ) ;
83
-
84
- if ( ! meta || meta . length <= 0 ) {
85
- return [ ] ;
86
- }
87
-
88
- let attr : ( ..._ : any ) => string | null = ( i : number , j : number ) => {
89
- return meta [ i ] ?. attributes [ j ] ?. textContent ;
90
- }
91
-
92
- let matches : ( ..._ : any ) => boolean = ( target : string , i : number , j : number ) => {
93
- return attr ( i , j ) ?. startsWith ( target ) ?? false ;
94
- }
95
-
96
- let filterPermute : ( ..._ : any ) => string = ( target : string , i : number ) => {
97
- let val1 = attr ( i , 1 ) ?? '' ;
98
- let val2 = attr ( i , 2 ) ?? '' ;
99
-
100
- if ( val1 . startsWith ( target ) ) {
101
- if ( val2 . startsWith ( target ) ) {
102
- return '' ;
103
- } else {
104
- return val2
105
- }
106
- } else {
107
- return val1 ;
108
- }
109
- }
110
-
111
71
let metatags : WebsiteMetaTagsModel [ ] = [ ] ;
112
- let targets : string [ ] = [ 'og:' , 'dc:' , 'keywords' ]
113
-
114
- // TODO: remove
115
- console . log ( 'meta tags: ' , meta ) ;
116
- console . log ( 'Targets: ' , targets ) ;
72
+ let meta = document . getElementsByTagName ( 'meta' ) ;
117
73
118
74
for ( let i = 0 ; i < meta . length ; i ++ ) {
119
- let name = meta [ i ] ?. attributes [ 0 ] ?. name ;
120
- if ( name && name === 'charset' ) { /* Charset tags */
121
- metatags . push ( {
122
- key : 'charset' ,
123
- value : attr ( i , 0 ) ,
124
- property : ''
125
- } ) ;
126
- } else {
127
- for ( let target of targets ) {
128
- if ( matches ( target , i , 0 ) ) {
129
- let val = filterPermute ( target , i ) ;
130
- if ( val !== '' && ! val . startsWith ( target ) ) {
131
- metatags . push ( {
132
- key : attr ( i , 0 ) ,
133
- value : val ,
134
- property : ''
135
- } )
136
- }
75
+ console . log ( `Meta[${ i } ] = ` , meta [ i ] ) ;
76
+
77
+ let names = [
78
+ meta [ i ] . name ,
79
+ meta [ i ] . attributes . getNamedItem ( 'property' ) ?. textContent ,
80
+ ] . filter ( n => n ) ;
81
+
82
+ const isTarget = names . some ( n => n && (
83
+ n . startsWith ( 'og:' ) || /* OpenGraph */
84
+ n . startsWith ( 'dc:' ) || /* Dublin Core */
85
+ ( n . startsWith ( 'twitter:' ) && ! n . startsWith ( 'twitter:app:' ) ) || /* Twitter (but not app) */
86
+ n . startsWith ( 'description' ) || /* Description */
87
+ n . startsWith ( 'article:' ) || /* Articles */
88
+ n . startsWith ( 'keywords' ) /* Keywords */
89
+ ) ) ;
90
+
91
+ if ( isTarget ) {
92
+ let contents = [
93
+ meta [ i ] . content ,
94
+ ] . filter ( c => c ) ;
95
+
96
+ for ( let name of names ) {
97
+ for ( let content of contents ) {
98
+ metatags . push ( {
99
+ key : name ,
100
+ value : content ,
101
+ property : ''
102
+ } ) ;
137
103
}
138
104
}
139
105
}
0 commit comments