| 
				
			 | 
			
			
				@@ -0,0 +1,68 @@ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				1
			 | 
			
			
				+import React, {Component} from 'react'; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				2
			 | 
			
			
				+import {Text, View, ScrollView} from 'react-native'; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				3
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				4
			 | 
			
			
				+import WebView from 'react-native-webview'; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				5
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				6
			 | 
			
			
				+const HTML = ` 
			 | 
		
	
		
			
			| 
				
			 | 
			
				7
			 | 
			
			
				+<!DOCTYPE html> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				8
			 | 
			
			
				+<html> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				9
			 | 
			
			
				+	<head> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				10
			 | 
			
			
				+	    <meta charset="utf-8"> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				11
			 | 
			
			
				+	    <meta name="viewport" content="width=device-width, initial-scale=1"> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				12
			 | 
			
			
				+	    <title>iframe test</title> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				13
			 | 
			
			
				+	</head> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				14
			 | 
			
			
				+	<body> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				15
			 | 
			
			
				+		<iframe src="https://birchlabs.co.uk/linguabrowse/infopages/obsol/iframe.html?v=1" name="iframe_0" style="width: 100%; height: 25px;"></iframe> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				16
			 | 
			
			
				+		<iframe src="https://birchlabs.co.uk/linguabrowse/infopages/obsol/iframe2.html?v=1" name="iframe_1" style="width: 100%; height: 25px;"></iframe> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				17
			 | 
			
			
				+		<iframe src="https://www.ebay.co.uk" name="iframe_2" style="width: 100%; height: 25px;"></iframe> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				18
			 | 
			
			
				+	</body> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				19
			 | 
			
			
				+</html> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				20
			 | 
			
			
				+`; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				21
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				22
			 | 
			
			
				+type Props = {}; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				23
			 | 
			
			
				+type State = { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				24
			 | 
			
			
				+  backgroundColor: string, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				25
			 | 
			
			
				+}; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				26
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				27
			 | 
			
			
				+export default class Injection extends Component<Props, State> { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				28
			 | 
			
			
				+  state = { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				29
			 | 
			
			
				+    backgroundColor: '#FF00FF00' 
			 | 
		
	
		
			
			| 
				
			 | 
			
				30
			 | 
			
			
				+  }; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				31
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				+  render() { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				33
			 | 
			
			
				+    return ( 
			 | 
		
	
		
			
			| 
				
			 | 
			
				34
			 | 
			
			
				+      <ScrollView> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				35
			 | 
			
			
				+        <View style={{ }}> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				36
			 | 
			
			
				+          <View style={{ height: 120 }}> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				37
			 | 
			
			
				+            <WebView 
			 | 
		
	
		
			
			| 
				
			 | 
			
				38
			 | 
			
			
				+              /** 
			 | 
		
	
		
			
			| 
				
			 | 
			
				39
			 | 
			
			
				+               * This HTML is a copy of a multi-frame JS injection test that I had lying around. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				40
			 | 
			
			
				+               * @see https://birchlabs.co.uk/linguabrowse/infopages/obsol/iframeTest.html 
			 | 
		
	
		
			
			| 
				
			 | 
			
				41
			 | 
			
			
				+               */ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				42
			 | 
			
			
				+              source={{ html: HTML }} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				43
			 | 
			
			
				+              automaticallyAdjustContentInsets={false} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				44
			 | 
			
			
				+              style={{backgroundColor:'#00000000'}} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				45
			 | 
			
			
				+               
			 | 
		
	
		
			
			| 
				
			 | 
			
				46
			 | 
			
			
				+              /* Must be populated in order for `messagingEnabled` to be `true` to activate the 
			 | 
		
	
		
			
			| 
				
			 | 
			
				47
			 | 
			
			
				+               * JS injection user scripts, consistent with current behaviour. This is undesirable, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				48
			 | 
			
			
				+               * so needs addressing in a follow-up PR. */ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				49
			 | 
			
			
				+              onMessage={() => {}} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				50
			 | 
			
			
				+              /* We set this property in each frame */ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				51
			 | 
			
			
				+              injectedJavaScriptBeforeContentLoaded={`window.self.colourToUse = "orange";`} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				52
			 | 
			
			
				+              injectedJavaScriptForMainFrameOnly={false} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				53
			 | 
			
			
				+              /* We read the colourToUse property in each frame to recolour each frame */ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				54
			 | 
			
			
				+              injectedJavaScript={`window.self.document.body.style.backgroundColor = window.self.colourToUse;`} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				55
			 | 
			
			
				+            /> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				56
			 | 
			
			
				+          </View> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				57
			 | 
			
			
				+        </View> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				58
			 | 
			
			
				+        <Text>This test presents three iframes: iframe_0 (yellow); iframe_1 (pink); and iframe_2 (transparent, because its 'X-Frame-Options' is set to 'SAMEORIGIN').</Text> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				59
			 | 
			
			
				+        <Text>Before injection, the webpage's background is the browser's default value (transparent or white) and each frame has its natural colour.</Text> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				60
			 | 
			
			
				+        <Text>1) At injection time "beforeContentLoaded", a variable will be set in each frame to set 'orange' as the "colour to be used".</Text> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				61
			 | 
			
			
				+        <Text>2) At injection time "afterContentLoaded", that variable will be read, and thus the colour orange will be injected into all frames.</Text> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				62
			 | 
			
			
				+        <Text>✅ If all frames become orange, then multi-frame injection is supported and both injection times are supported.</Text> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				63
			 | 
			
			
				+        <Text>❌ If no frames become orange, then only one (or neither) of the injection times are supported, or even injection into the main frame is failing.</Text> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				64
			 | 
			
			
				+        <Text>❌ If only the main frame becomes orange, then multi-frame injection is not supported.</Text> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				65
			 | 
			
			
				+      </ScrollView> 
			 | 
		
	
		
			
			| 
				
			 | 
			
				66
			 | 
			
			
				+    ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				67
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				68
			 | 
			
			
				+} 
			 |