9
9
import java .io .IOException ;
10
10
import java .net .URL ;
11
11
import java .nio .charset .StandardCharsets ;
12
+ import java .util .Map ;
12
13
13
14
/**
14
15
* Headless-Window.
15
16
*
16
17
* @author Osiris-Team
17
18
*/
18
19
public class HWindow implements AutoCloseable {
20
+ // Options
21
+ private HBrowser parentBrowser ;
22
+ private boolean enableJavaScript ;
23
+ private Map <String , String > customHeaders ;
24
+
19
25
private final JSContext jsContext = new JSContext (this );
20
26
private Document document ;
21
27
private String authority ;
22
28
private String javaScriptCode ;
23
29
30
+ public HWindow (HBrowser parentBrowser , boolean enableJavaScript , Map <String , String > customHeaders ) {
31
+ this .parentBrowser = parentBrowser ;
32
+ this .enableJavaScript = enableJavaScript ;
33
+ this .customHeaders = customHeaders ;
34
+ }
35
+
24
36
public HWindow load (String url ) throws IOException {
25
37
if (!url .startsWith ("http" ))
26
38
url = "https://" + url ;
27
39
40
+ Map <String , String > headers = null ;
41
+ if (this .customHeaders == null )
42
+ headers = new ChromeHeaders ().get ();
43
+ else
44
+ headers = this .customHeaders ;
45
+
28
46
authority = new URL (url ).getAuthority ();
29
- document = Jsoup .connect (url ).headers (new ChromeHeaders (). get () )
47
+ document = Jsoup .connect (url ).headers (headers )
30
48
.get ();
31
49
32
- int scriptElements = 0 ;
33
- javaScriptCode = "" ;
34
- for (Element e :
35
- document .getElementsByTag ("script" )) {
36
- if (e .hasAttr ("src" )) {
37
- String externalScriptUrl = e .attr ("src" );
38
- if (!externalScriptUrl .startsWith ("http" )) {
39
- if (externalScriptUrl .startsWith ("/" ))
40
- externalScriptUrl = "https://" + authority + externalScriptUrl ;
41
- else
42
- externalScriptUrl = "https://" + authority + "/" + externalScriptUrl ;
50
+ if (enableJavaScript ){
51
+ int scriptElements = 0 ;
52
+ javaScriptCode = "" ;
53
+ for (Element e :
54
+ document .getElementsByTag ("script" )) {
55
+ if (e .hasAttr ("src" )) {
56
+ String externalScriptUrl = e .attr ("src" );
57
+ if (!externalScriptUrl .startsWith ("http" )) {
58
+ if (externalScriptUrl .startsWith ("/" ))
59
+ externalScriptUrl = "https://" + authority + externalScriptUrl ;
60
+ else
61
+ externalScriptUrl = "https://" + authority + "/" + externalScriptUrl ;
62
+ }
63
+
64
+ javaScriptCode = javaScriptCode + "\n " +
65
+ "//\n " +
66
+ "// Following lines are external JS-Code from " + externalScriptUrl + "\n " +
67
+ "//\n " +
68
+ "\n " +
69
+ "" + new String (Jsoup .connect (externalScriptUrl ).ignoreContentType (true )
70
+ .get ()
71
+ .connection ().response ().bodyAsBytes (), StandardCharsets .UTF_8 );
72
+ } else {
73
+ javaScriptCode = javaScriptCode + "\n " +
74
+ "//\n " +
75
+ "// Following lines are JS-Code from <script> number " + (scriptElements ++) + "\n " +
76
+ "//\n " +
77
+ "\n " +
78
+ "" + e .data ();
43
79
}
44
80
45
- javaScriptCode = javaScriptCode + "\n " +
46
- "//\n " +
47
- "// Following lines are external JS-Code from " + externalScriptUrl + "\n " +
48
- "//\n " +
49
- "\n " +
50
- "" + new String (Jsoup .connect (externalScriptUrl ).ignoreContentType (true )
51
- .get ()
52
- .connection ().response ().bodyAsBytes (), StandardCharsets .UTF_8 );
53
- } else {
54
- javaScriptCode = javaScriptCode + "\n " +
55
- "//\n " +
56
- "// Following lines are JS-Code from <script> number " + (scriptElements ++) + "\n " +
57
- "//\n " +
58
- "\n " +
59
- "" + e .data ();
81
+ // Execute code
82
+ jsContext .eval (javaScriptCode );
60
83
}
61
-
62
- // Execute code
63
- jsContext .eval (javaScriptCode );
64
84
}
65
85
return this ;
66
86
}
@@ -83,6 +103,22 @@ public String getJavaScriptCode() {
83
103
84
104
@ Override
85
105
public void close () {
86
- //TODO
106
+ jsContext .close ();
107
+ }
108
+
109
+ public HBrowser getParentBrowser () {
110
+ return parentBrowser ;
111
+ }
112
+
113
+ public void setParentBrowser (HBrowser parentBrowser ) {
114
+ this .parentBrowser = parentBrowser ;
115
+ }
116
+
117
+ public boolean isEnableJavaScript () {
118
+ return enableJavaScript ;
119
+ }
120
+
121
+ public void setEnableJavaScript (boolean enableJavaScript ) {
122
+ this .enableJavaScript = enableJavaScript ;
87
123
}
88
124
}
0 commit comments