jihuaqiang 2 rokov pred
rodič
commit
306f7da94e

+ 2 - 0
ios/Denet/Info.plist

@@ -26,6 +26,8 @@
 	<true/>
 	<key>NSAppTransportSecurity</key>
 	<dict>
+		<key>NSAllowsLocalNetworking</key>
+    	<true/>
 		<key>NSExceptionDomains</key>
 		<dict>
 			<key>localhost</key>

+ 4 - 4
src/components/webview.tsx

@@ -6,10 +6,10 @@ import { WebView } from 'react-native-webview';
 
 interface Props {
 	uri: any;
-	onLoadEndHandle: () => void;
-	handleWebViewNavigationStateChange: (newNavState: { url: any }) => void;
-	onMessageHandle: (e: any) => void;
-	refHandle: (r: any) => any;
+	onLoadEndHandle?: () => void;
+	handleWebViewNavigationStateChange?: (newNavState: { url: any }) => void;
+	onMessageHandle?: (e: any) => void;
+	refHandle?: (r: any) => any;
 }
 export const DenetWebview = (props: Props) => {
 	return (

+ 26 - 1
src/pages/screens/redpack.tsx

@@ -2,11 +2,15 @@
 import React, { Component } from 'react';
 import { View, Text, DeviceEventEmitter, Button } from 'react-native';
 // import EventEmitter from 'react-native-eventemitter';
+import { DenetWebview } from '@/components/webview';
+import { guid } from '@/utils/';
+import messageCenter from '@/utils/messageCenter';
 
 interface Props {
 	route: any;
 }
 class Redpack extends Component<Props> {
+	webref = {} as any;
 	favoriteTweet = () => {
 		const idArray = this.props.route.params.tweet_Id.split('');
 		console.log(idArray);
@@ -17,13 +21,27 @@ class Redpack extends Component<Props> {
 			id2: idArray.join(''),
 		});
 	};
+
+	onMessageHandle = (messageData: any) => {
+		let { info, data } =
+			(messageData.nativeEvent.data &&
+				JSON.parse(messageData.nativeEvent.data)) ||
+			{};
+		console.log('onMessageHandle', info, data);
+		info.target = this.webref;
+		messageCenter.send({ info, data });
+	};
+
 	componentDidMount() {
 		// this.TwitterLikeAPI();
 	}
 	render() {
+		const { tweet_Id, post_Id, invite_code, ct0, page_type } =
+			this.props.route.params;
+		const iframe_id = `denet-${guid()}`;
 		return (
 			<View style={{ flex: 1 }}>
-				<Text>tweet_Id: {this.props.route.params.tweet_Id}</Text>
+				{/* <Text>tweet_Id: {this.props.route.params.tweet_Id}</Text>
 				<Text>post_Id: {this.props.route.params.post_Id}</Text>
 				<Text>invite_code: {this.props.route.params.invite_code}</Text>
 				<Text>ct0: {this.props.route.params.ct0}</Text>
@@ -32,6 +50,13 @@ class Redpack extends Component<Props> {
 					title="FavoriteTweet"
 					color="#841584"
 					accessibilityLabel="FavoriteTweet when click"
+				/> */}
+				<DenetWebview
+					onLoadEndHandle={() => {}}
+					refHandle={r => (this.webref = r)}
+					onMessageHandle={this.onMessageHandle}
+					handleWebViewNavigationStateChange={() => {}}
+					uri={`http://localhost:3001/red-pack?postId=${post_Id}&tweetId=${tweet_Id}&tweet_author=&window_origin=https://twitter.com&page_type=${page_type}&iframeId=${iframe_id}&appVersionCode=22`}
 				/>
 			</View>
 		);

+ 11 - 7
src/pages/screens/twitter.tsx

@@ -99,10 +99,11 @@ class Twitter extends Component<Props> {
 	FavoriteTweet = (data: any) => {
 		// let jsString = `window.TwitterLikeAPI(${data.tweet_Id})`;
 		// data = JSON.parse(data);
-		this.webref.injectJavaScript(`
-		window.TwitterLikeAPI(${data.id1},${data.id2});
-      true;
-    `);
+		console.log('FavoriteTweet', data);
+		// 	this.webref.injectJavaScript(`
+		// 	window.TwitterLikeAPI(${data.id1},${data.id2});
+		//   true;
+		// `);
 	};
 
 	getPostId(shortUrl: RequestInfo) {
@@ -119,9 +120,12 @@ class Twitter extends Component<Props> {
 	}
 
 	async componentDidMount() {
-		DeviceEventEmitter.addListener('FavoriteTweet', (data: any) => {
-			this.FavoriteTweet(data);
-		});
+		DeviceEventEmitter.addListener(
+			'IFRAME_TWITTER_API_DO_TASK',
+			(data: any) => {
+				this.FavoriteTweet(data);
+			},
+		);
 	}
 
 	render() {

+ 32 - 0
src/utils/messageCenter/index.ts

@@ -0,0 +1,32 @@
+import { getStorageData } from '@/storage/';
+import { DeviceEventEmitter } from 'react-native';
+
+interface Message {
+	info: any;
+	data: any;
+}
+class MessageCenter {
+	async send(message: Message) {
+		console.log('MessageCenter', message);
+		const { target, messageId, actionType } = message.info;
+		switch (message.info.actionType) {
+			case 'IFRAME_GET_EXTENSION_STORGE_DATA':
+				const _data = await getStorageData(message.data.key);
+				target.postMessage(
+					JSON.stringify({
+						info: { messageId, actionType },
+						data: _data,
+					}),
+				);
+				break;
+			case 'IFRAME_TWITTER_API_DO_TASK':
+				DeviceEventEmitter.emit(actionType, message.data);
+				break;
+			default:
+				break;
+		}
+	}
+}
+
+const messageCenter = new MessageCenter();
+export default messageCenter;