feat(windows): JS-WebView messaging bridge & multiple WebViews fixes (#1617)
* Manage to build webview using Visual Studio * WebView in content of UserControl * Destructor not needed * Example app tested * Add messagingEnabled prop * WebViewBridge * Message posting * Store bridge as instance variable * Use bridge if messagingEnabled * Free event delegate * PostMessage api uses string message * script.notify() usage removed * Debug log removed * Bridge reference added * Base for web allowed object implemented c++/winrt * Bribge works * "Microsoft.Windows.CppWinRT" version="2.0.200729.8" * Update bridge implementation * version changes * Reference fix * WebView prj builds * yarn lock update * Platfrom version update * NuGet package reference updated * Messaging test added into example app * Typo fix * try_as() to as() calls * WebView.PostMessage() not supported anymore, use injectJavaScript * Fix WebView.postMessage to work using injectJavascript * Eval postMessage fix * postMessage via injectJavascript * Example fixed to handle postMessage call
This commit is contained in:
parent
63984157fa
commit
b930e25a8f
|
@ -17,8 +17,17 @@ import Downloads from './examples/Downloads';
|
||||||
import Uploads from './examples/Uploads';
|
import Uploads from './examples/Uploads';
|
||||||
import Injection from './examples/Injection';
|
import Injection from './examples/Injection';
|
||||||
import LocalPageLoad from './examples/LocalPageLoad';
|
import LocalPageLoad from './examples/LocalPageLoad';
|
||||||
|
import Messaging from './examples/Messaging';
|
||||||
|
|
||||||
const TESTS = {
|
const TESTS = {
|
||||||
|
Messaging: {
|
||||||
|
title: 'Messaging',
|
||||||
|
testId: 'messaging',
|
||||||
|
description: 'js-webview postMessage messaging test',
|
||||||
|
render() {
|
||||||
|
return <Messaging />;
|
||||||
|
},
|
||||||
|
},
|
||||||
Alerts: {
|
Alerts: {
|
||||||
title: 'Alerts',
|
title: 'Alerts',
|
||||||
testId: 'alerts',
|
testId: 'alerts',
|
||||||
|
@ -78,7 +87,7 @@ const TESTS = {
|
||||||
};
|
};
|
||||||
|
|
||||||
type Props = {};
|
type Props = {};
|
||||||
type State = {restarting: boolean, currentTest: Object};
|
type State = {restarting: boolean; currentTest: Object};
|
||||||
|
|
||||||
export default class App extends Component<Props, State> {
|
export default class App extends Component<Props, State> {
|
||||||
state = {
|
state = {
|
||||||
|
@ -90,7 +99,7 @@ export default class App extends Component<Props, State> {
|
||||||
this.setState({restarting: true}, () => this.setState({restarting: false}));
|
this.setState({restarting: true}, () => this.setState({restarting: false}));
|
||||||
};
|
};
|
||||||
|
|
||||||
_changeTest = testName => {
|
_changeTest = (testName) => {
|
||||||
this.setState({currentTest: TESTS[testName]});
|
this.setState({currentTest: TESTS[testName]});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -138,16 +147,25 @@ export default class App extends Component<Props, State> {
|
||||||
title="LocalPageLoad"
|
title="LocalPageLoad"
|
||||||
onPress={() => this._changeTest('PageLoad')}
|
onPress={() => this._changeTest('PageLoad')}
|
||||||
/>
|
/>
|
||||||
{Platform.OS == "ios" && <Button
|
{Platform.OS == 'ios' && (
|
||||||
testID="testType_downloads"
|
<Button
|
||||||
title="Downloads"
|
testID="testType_downloads"
|
||||||
onPress={() => this._changeTest('Downloads')}
|
title="Downloads"
|
||||||
/>}
|
onPress={() => this._changeTest('Downloads')}
|
||||||
{Platform.OS === 'android' && <Button
|
/>
|
||||||
testID="testType_uploads"
|
)}
|
||||||
title="Uploads"
|
{Platform.OS === 'android' && (
|
||||||
onPress={() => this._changeTest('Uploads')}
|
<Button
|
||||||
/>}
|
testID="testType_uploads"
|
||||||
|
title="Uploads"
|
||||||
|
onPress={() => this._changeTest('Uploads')}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
<Button
|
||||||
|
testID="testType_messaging"
|
||||||
|
title="Messaging"
|
||||||
|
onPress={() => this._changeTest('Messaging')}
|
||||||
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
{restarting ? null : (
|
{restarting ? null : (
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
import React, {Component} from 'react';
|
||||||
|
import {View, Alert} from 'react-native';
|
||||||
|
|
||||||
|
import WebView from 'react-native-webview';
|
||||||
|
|
||||||
|
const HTML = `<!DOCTYPE html>\n
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Messaging</title>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="viewport" content="width=320, user-scalable=no">
|
||||||
|
<style type="text/css">
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font: 62.5% arial, sans-serif;
|
||||||
|
background: #ccc;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<button onclick="sendPostMessage()">Send post message from JS to WebView</button>
|
||||||
|
<p id="demo"></p>
|
||||||
|
<script>
|
||||||
|
function sendPostMessage() {
|
||||||
|
window.ReactNativeWebView.postMessage('Message from JS');
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('message',function(event){
|
||||||
|
console.log("Message received from RN: ",event.data)
|
||||||
|
},false);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>`;
|
||||||
|
|
||||||
|
type Props = {};
|
||||||
|
type State = {};
|
||||||
|
|
||||||
|
export default class Messaging extends Component<Props, State> {
|
||||||
|
state = {};
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.webView = React.createRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<View style={{height: 120}}>
|
||||||
|
<WebView
|
||||||
|
ref={this.webView}
|
||||||
|
source={{html: HTML}}
|
||||||
|
onLoadEnd={()=>{this.webView.current.postMessage('Hello from RN');}}
|
||||||
|
automaticallyAdjustContentInsets={false}
|
||||||
|
onMessage={(e: {nativeEvent: {data?: string}}) => {
|
||||||
|
Alert.alert('Message received from JS: ', e.nativeEvent.data);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -42,9 +42,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mso", "..\..\node_modules\r
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeWebView", "..\..\windows\ReactNativeWebView\ReactNativeWebView.vcxproj", "{729D9AF8-CD9E-4427-9F6C-FB757E287729}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeWebView", "..\..\windows\ReactNativeWebView\ReactNativeWebView.vcxproj", "{729D9AF8-CD9E-4427-9F6C-FB757E287729}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebViewBridgeComponent", "..\..\windows\WebViewBridgeComponent\WebViewBridgeComponent.vcxproj", "{FCB612AD-FACC-410C-828C-24B5940B2762}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||||
..\..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9
|
..\..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9
|
||||||
|
..\..\node_modules\react-native-windows\ReactWindowsCore\ReactWindowsCore.vcxitems*{11c084a3-a57c-4296-a679-cac17b603144}*SharedItemsImports = 4
|
||||||
..\..\node_modules\react-native-windows\Shared\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9
|
..\..\node_modules\react-native-windows\Shared\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9
|
||||||
..\..\node_modules\react-native-windows\Microsoft.ReactNative.SharedManaged\Microsoft.ReactNative.SharedManaged.projitems*{67a1076f-7790-4203-86ea-4402ccb5e782}*SharedItemsImports = 13
|
..\..\node_modules\react-native-windows\Microsoft.ReactNative.SharedManaged\Microsoft.ReactNative.SharedManaged.projitems*{67a1076f-7790-4203-86ea-4402ccb5e782}*SharedItemsImports = 13
|
||||||
..\..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{729d9af8-cd9e-4427-9f6c-fb757e287729}*SharedItemsImports = 4
|
..\..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{729d9af8-cd9e-4427-9f6c-fb757e287729}*SharedItemsImports = 4
|
||||||
|
@ -60,16 +63,19 @@ Global
|
||||||
..\..\node_modules\react-native-windows\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
..\..\node_modules\react-native-windows\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Debug|ARM = Debug|ARM
|
Debug|ARM = Debug|ARM
|
||||||
Debug|ARM64 = Debug|ARM64
|
Debug|ARM64 = Debug|ARM64
|
||||||
Debug|x64 = Debug|x64
|
Debug|x64 = Debug|x64
|
||||||
Debug|x86 = Debug|x86
|
Debug|x86 = Debug|x86
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
Release|ARM = Release|ARM
|
Release|ARM = Release|ARM
|
||||||
Release|ARM64 = Release|ARM64
|
Release|ARM64 = Release|ARM64
|
||||||
Release|x64 = Release|x64
|
Release|x64 = Release|x64
|
||||||
Release|x86 = Release|x86
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|ARM.ActiveCfg = Debug|ARM
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|ARM.Build.0 = Debug|ARM
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|ARM.Deploy.0 = Debug|ARM
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||||
|
@ -82,6 +88,7 @@ Global
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|x86.ActiveCfg = Debug|Win32
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|x86.Build.0 = Debug|Win32
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|x86.Build.0 = Debug|Win32
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|x86.Deploy.0 = Debug|Win32
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Debug|x86.Deploy.0 = Debug|Win32
|
||||||
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|ARM.ActiveCfg = Release|ARM
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|ARM.Build.0 = Release|ARM
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|ARM.Build.0 = Release|ARM
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|ARM.Deploy.0 = Release|ARM
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|ARM.Deploy.0 = Release|ARM
|
||||||
|
@ -94,6 +101,7 @@ Global
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|x86.ActiveCfg = Release|Win32
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|x86.Build.0 = Release|Win32
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|x86.Build.0 = Release|Win32
|
||||||
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|x86.Deploy.0 = Release|Win32
|
{AC6C354F-8C80-47EA-9E40-996ABE271843}.Release|x86.Deploy.0 = Release|Win32
|
||||||
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.ActiveCfg = Debug|ARM
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.Build.0 = Debug|ARM
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
@ -102,6 +110,7 @@ Global
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.Build.0 = Debug|x64
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.Build.0 = Debug|x64
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.ActiveCfg = Debug|Win32
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.Build.0 = Debug|Win32
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.ActiveCfg = Release|ARM
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.Build.0 = Release|ARM
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.Build.0 = Release|ARM
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.ActiveCfg = Release|ARM64
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
@ -110,6 +119,7 @@ Global
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32
|
{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.ActiveCfg = Debug|ARM
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.Build.0 = Debug|ARM
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
@ -118,6 +128,7 @@ Global
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.Build.0 = Debug|x64
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.Build.0 = Debug|x64
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.ActiveCfg = Debug|Win32
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.Build.0 = Debug|Win32
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.ActiveCfg = Release|ARM
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.Build.0 = Release|ARM
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.Build.0 = Release|ARM
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.ActiveCfg = Release|ARM64
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
@ -126,6 +137,7 @@ Global
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.Build.0 = Release|x64
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.Build.0 = Release|x64
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32
|
{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM.ActiveCfg = Debug|ARM
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM.Build.0 = Debug|ARM
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
@ -134,6 +146,7 @@ Global
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x64.Build.0 = Debug|x64
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x64.Build.0 = Debug|x64
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x86.ActiveCfg = Debug|Win32
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x86.Build.0 = Debug|Win32
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM.ActiveCfg = Release|ARM
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM.Build.0 = Release|ARM
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM.Build.0 = Release|ARM
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM64.ActiveCfg = Release|ARM64
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
@ -142,6 +155,7 @@ Global
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x64.Build.0 = Release|x64
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x64.Build.0 = Release|x64
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.ActiveCfg = Release|Win32
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.Build.0 = Release|Win32
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.ActiveCfg = Debug|ARM
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.Build.0 = Debug|ARM
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
@ -150,6 +164,7 @@ Global
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.Build.0 = Debug|x64
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.Build.0 = Debug|x64
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.ActiveCfg = Debug|Win32
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.Build.0 = Debug|Win32
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.ActiveCfg = Release|ARM
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.Build.0 = Release|ARM
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.Build.0 = Release|ARM
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.ActiveCfg = Release|ARM64
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
@ -158,6 +173,7 @@ Global
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32
|
{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.ActiveCfg = Debug|ARM
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.Build.0 = Debug|ARM
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
@ -166,6 +182,7 @@ Global
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.Build.0 = Debug|x64
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.Build.0 = Debug|x64
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.ActiveCfg = Debug|Win32
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.Build.0 = Debug|Win32
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.ActiveCfg = Release|ARM
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.Build.0 = Release|ARM
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.Build.0 = Release|ARM
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.ActiveCfg = Release|ARM64
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
@ -174,6 +191,7 @@ Global
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.Build.0 = Release|x64
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.Build.0 = Release|x64
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.ActiveCfg = Release|Win32
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.Build.0 = Release|Win32
|
{A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.ActiveCfg = Debug|ARM
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.Build.0 = Debug|ARM
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
@ -182,6 +200,7 @@ Global
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.Build.0 = Debug|x64
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.Build.0 = Debug|x64
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.ActiveCfg = Debug|Win32
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.Build.0 = Debug|Win32
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.ActiveCfg = Release|ARM
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.Build.0 = Release|ARM
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.Build.0 = Release|ARM
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.ActiveCfg = Release|ARM64
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
@ -190,6 +209,7 @@ Global
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32
|
{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|ARM.ActiveCfg = Debug|ARM
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|ARM.Build.0 = Debug|ARM
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|ARM64.ActiveCfg = Debug|Win32
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|ARM64.ActiveCfg = Debug|Win32
|
||||||
|
@ -197,6 +217,7 @@ Global
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x64.Build.0 = Debug|x64
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x64.Build.0 = Debug|x64
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x86.ActiveCfg = Debug|Win32
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x86.Build.0 = Debug|Win32
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|ARM.ActiveCfg = Release|ARM
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|ARM.Build.0 = Release|ARM
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|ARM.Build.0 = Release|ARM
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|ARM64.ActiveCfg = Release|Win32
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|ARM64.ActiveCfg = Release|Win32
|
||||||
|
@ -204,6 +225,24 @@ Global
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x64.Build.0 = Release|x64
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x64.Build.0 = Release|x64
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x86.ActiveCfg = Release|Win32
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x86.Build.0 = Release|Win32
|
{729D9AF8-CD9E-4427-9F6C-FB757E287729}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|ARM.Build.0 = Release|ARM
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|ARM64.Build.0 = Release|ARM64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|x64.Build.0 = Release|x64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|x86.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<CppWinRTOptimized>true</CppWinRTOptimized>
|
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||||
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||||
|
@ -167,15 +167,15 @@
|
||||||
<Import Project="..\..\..\node_modules\react-native-windows\PropertySheets\Bundle.Cpp.targets" />
|
<Import Project="..\..\..\node_modules\react-native-windows\PropertySheets\Bundle.Cpp.targets" />
|
||||||
<Import Project="..\..\..\node_modules\react-native-windows\PropertySheets\Bundle.props" />
|
<Import Project="..\..\..\node_modules\react-native-windows\PropertySheets\Bundle.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
<Import Project="$(SolutionDir)packages\Microsoft.UI.Xaml.2.3.191129002\build\native\Microsoft.UI.Xaml.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.UI.Xaml.2.3.191129002\build\native\Microsoft.UI.Xaml.targets')" />
|
<Import Project="$(SolutionDir)packages\Microsoft.UI.Xaml.2.3.191129002\build\native\Microsoft.UI.Xaml.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.UI.Xaml.2.3.191129002\build\native\Microsoft.UI.Xaml.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.UI.Xaml.2.3.191129002\build\native\Microsoft.UI.Xaml.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.UI.Xaml.2.3.191129002\build\native\Microsoft.UI.Xaml.targets'))" />
|
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.UI.Xaml.2.3.191129002\build\native\Microsoft.UI.Xaml.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.UI.Xaml.2.3.191129002\build\native\Microsoft.UI.Xaml.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.190730.2" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.200729.8" targetFramework="native" />
|
||||||
<package id="Microsoft.UI.Xaml" version="2.3.191129002" targetFramework="native" />
|
<package id="Microsoft.UI.Xaml" version="2.3.191129002" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
|
@ -65,7 +65,7 @@
|
||||||
"react": "16.11.0",
|
"react": "16.11.0",
|
||||||
"react-native": "0.62.2",
|
"react-native": "0.62.2",
|
||||||
"react-native-macos": "0.60.0-microsoft.73",
|
"react-native-macos": "0.60.0-microsoft.73",
|
||||||
"react-native-windows": "^0.62.0-0",
|
"react-native-windows": "^0.62.5",
|
||||||
"semantic-release": "15.13.24",
|
"semantic-release": "15.13.24",
|
||||||
"typescript": "3.8.3",
|
"typescript": "3.8.3",
|
||||||
"appium": "1.17.0",
|
"appium": "1.17.0",
|
||||||
|
|
|
@ -104,14 +104,23 @@ export default class WebView extends React.Component<WebViewSharedProps, State>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
postMessage = (data: string) => {
|
postMessage = (data: string) => {
|
||||||
|
const message = this.getInjectableJSMessage(data);
|
||||||
UIManager.dispatchViewManagerCommand(
|
UIManager.dispatchViewManagerCommand(
|
||||||
this.getWebViewHandle(),
|
this.getWebViewHandle(),
|
||||||
UIManager.getViewManagerConfig('RCTWebView').Commands.postMessage,
|
UIManager.getViewManagerConfig('RCTWebView').Commands.injectJavaScript,
|
||||||
[String(data)],
|
[message],
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getInjectableJSMessage = (message: string ) => {
|
||||||
|
return `(function() {window.dispatchEvent(new MessageEvent('message', {data: ${JSON.stringify(
|
||||||
|
message
|
||||||
|
)}}));})();`;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We return an event with a bunch of fields including:
|
* We return an event with a bunch of fields including:
|
||||||
* url, title, loading, canGoBack, canGoForward
|
* url, title, loading, canGoBack, canGoForward
|
||||||
|
|
|
@ -29,10 +29,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactUWP", "..\node_modules
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactWindowsCore", "..\node_modules\react-native-windows\ReactWindowsCore\ReactWindowsCore.vcxproj", "{11C084A3-A57C-4296-A679-CAC17B603144}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactWindowsCore", "..\node_modules\react-native-windows\ReactWindowsCore\ReactWindowsCore.vcxproj", "{11C084A3-A57C-4296-A679-CAC17B603144}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebViewBridgeComponent", "WebViewBridgeComponent\WebViewBridgeComponent.vcxproj", "{FCB612AD-FACC-410C-828C-24B5940B2762}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||||
..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9
|
..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9
|
||||||
|
..\node_modules\react-native-windows\ReactWindowsCore\ReactWindowsCore.vcxitems*{11c084a3-a57c-4296-a679-cac17b603144}*SharedItemsImports = 4
|
||||||
..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{2d5d43d9-cffc-4c40-b4cd-02efb4e2742b}*SharedItemsImports = 4
|
..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{2d5d43d9-cffc-4c40-b4cd-02efb4e2742b}*SharedItemsImports = 4
|
||||||
|
..\node_modules\react-native-windows\Mso\Mso.vcxitems*{2d5d43d9-cffc-4c40-b4cd-02efb4e2742b}*SharedItemsImports = 4
|
||||||
..\node_modules\react-native-windows\Shared\Shared.vcxitems*{2d5d43d9-cffc-4c40-b4cd-02efb4e2742b}*SharedItemsImports = 4
|
..\node_modules\react-native-windows\Shared\Shared.vcxitems*{2d5d43d9-cffc-4c40-b4cd-02efb4e2742b}*SharedItemsImports = 4
|
||||||
..\node_modules\react-native-windows\Microsoft.ReactNative.SharedManaged\Microsoft.ReactNative.SharedManaged.projitems*{67a1076f-7790-4203-86ea-4402ccb5e782}*SharedItemsImports = 13
|
..\node_modules\react-native-windows\Microsoft.ReactNative.SharedManaged\Microsoft.ReactNative.SharedManaged.projitems*{67a1076f-7790-4203-86ea-4402ccb5e782}*SharedItemsImports = 13
|
||||||
..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{729d9af8-cd9e-4427-9f6c-fb757e287729}*SharedItemsImports = 4
|
..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{729d9af8-cd9e-4427-9f6c-fb757e287729}*SharedItemsImports = 4
|
||||||
|
@ -41,6 +45,7 @@ Global
|
||||||
..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9
|
..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9
|
||||||
..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
||||||
..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
||||||
|
..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
||||||
..\node_modules\react-native-windows\Mso\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
..\node_modules\react-native-windows\Mso\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
||||||
..\node_modules\react-native-windows\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
..\node_modules\react-native-windows\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
@ -181,6 +186,22 @@ Global
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x64.Build.0 = Release|x64
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x64.Build.0 = Release|x64
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.ActiveCfg = Release|Win32
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.Build.0 = Release|Win32
|
{11C084A3-A57C-4296-A679-CAC17B603144}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|ARM.Build.0 = Release|ARM
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|ARM64.Build.0 = Release|ARM64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|x64.Build.0 = Release|x64
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{FCB612AD-FACC-410C-828C-24B5940B2762}.Release|x86.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200316.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200316.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<CppWinRTOptimized>true</CppWinRTOptimized>
|
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||||
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||||
|
@ -145,16 +145,19 @@
|
||||||
<Project>{f7d32bd0-2749-483e-9a0d-1635ef7e3136}</Project>
|
<Project>{f7d32bd0-2749-483e-9a0d-1635ef7e3136}</Project>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\WebViewBridgeComponent\WebViewBridgeComponent.vcxproj">
|
||||||
|
<Project>{176323cd-97ce-4b0f-9d11-a2b77bda829b}</Project>
|
||||||
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200316.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200316.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200316.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200316.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.190730.2\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200316.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200316.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
|
@ -6,6 +6,8 @@
|
||||||
#include "ReactWebView.h"
|
#include "ReactWebView.h"
|
||||||
#include "ReactWebView.g.cpp"
|
#include "ReactWebView.g.cpp"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace winrt {
|
namespace winrt {
|
||||||
using namespace Microsoft::ReactNative;
|
using namespace Microsoft::ReactNative;
|
||||||
using namespace Windows::Data::Json;
|
using namespace Windows::Data::Json;
|
||||||
|
@ -26,11 +28,15 @@ namespace winrt::ReactNativeWebView::implementation {
|
||||||
#else
|
#else
|
||||||
m_webView = winrt::WebView();
|
m_webView = winrt::WebView();
|
||||||
#endif
|
#endif
|
||||||
|
this->Content(m_webView);
|
||||||
RegisterEvents();
|
RegisterEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
winrt::WebView ReactWebView::GetView() {
|
ReactWebView::~ReactWebView()
|
||||||
return m_webView;
|
{
|
||||||
|
if (m_messagingEnabled) {
|
||||||
|
m_webBridge.MessagePostEvent(m_messageToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactWebView::RegisterEvents() {
|
void ReactWebView::RegisterEvents() {
|
||||||
|
@ -55,94 +61,103 @@ namespace winrt::ReactNativeWebView::implementation {
|
||||||
self->OnNavigationFailed(sender, args);
|
self->OnNavigationFailed(sender, args);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
m_scriptNotifyRevoker = m_webView.ScriptNotify(
|
|
||||||
winrt::auto_revoke, [ref = get_weak()](auto const& sender, auto const& args) {
|
|
||||||
if (auto self = ref.get()) {
|
|
||||||
self->OnScriptNotify(sender, args);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactWebView::WriteWebViewNavigationEventArg(winrt::IJSValueWriter const& eventDataWriter) {
|
void ReactWebView::WriteWebViewNavigationEventArg(winrt::WebView const& sender, winrt::IJSValueWriter const& eventDataWriter) {
|
||||||
auto tag = m_webView.GetValue(winrt::FrameworkElement::TagProperty()).as<winrt::IPropertyValue>().GetInt64();
|
auto tag = this->GetValue(winrt::FrameworkElement::TagProperty()).as<winrt::IPropertyValue>().GetInt64();
|
||||||
WriteProperty(eventDataWriter, L"canGoBack", m_webView.CanGoBack());
|
WriteProperty(eventDataWriter, L"canGoBack", sender.CanGoBack());
|
||||||
WriteProperty(eventDataWriter, L"canGoForward", m_webView.CanGoForward());
|
WriteProperty(eventDataWriter, L"canGoForward", sender.CanGoForward());
|
||||||
WriteProperty(eventDataWriter, L"loading", !m_webView.IsLoaded());
|
WriteProperty(eventDataWriter, L"loading", !sender.IsLoaded());
|
||||||
WriteProperty(eventDataWriter, L"target", tag);
|
WriteProperty(eventDataWriter, L"target", tag);
|
||||||
WriteProperty(eventDataWriter, L"title", m_webView.DocumentTitle());
|
WriteProperty(eventDataWriter, L"title", sender.DocumentTitle());
|
||||||
if (auto uri = m_webView.Source()) {
|
if (auto uri = sender.Source()) {
|
||||||
WriteProperty(eventDataWriter, L"url", uri.AbsoluteCanonicalUri());
|
WriteProperty(eventDataWriter, L"url", uri.AbsoluteCanonicalUri());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactWebView::OnNavigationStarting(winrt::WebView const& webView, winrt::WebViewNavigationStartingEventArgs const& /*args*/) {
|
void ReactWebView::OnNavigationStarting(winrt::WebView const& webView, winrt::WebViewNavigationStartingEventArgs const& /*args*/) {
|
||||||
m_reactContext.DispatchEvent(
|
m_reactContext.DispatchEvent(
|
||||||
webView,
|
*this,
|
||||||
L"topLoadingStart",
|
L"topLoadingStart",
|
||||||
[&](winrt::IJSValueWriter const& eventDataWriter) noexcept {
|
[&](winrt::IJSValueWriter const& eventDataWriter) noexcept {
|
||||||
eventDataWriter.WriteObjectBegin();
|
eventDataWriter.WriteObjectBegin();
|
||||||
WriteWebViewNavigationEventArg(eventDataWriter);
|
WriteWebViewNavigationEventArg(webView, eventDataWriter);
|
||||||
eventDataWriter.WriteObjectEnd();
|
eventDataWriter.WriteObjectEnd();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (m_messagingEnabled) {
|
||||||
|
m_webBridge = WebBridge();
|
||||||
|
m_messageToken = m_webBridge.MessagePostEvent([this](const auto&, hstring const& message)
|
||||||
|
{
|
||||||
|
this->OnMessagePosted(message);
|
||||||
|
});
|
||||||
|
webView.AddWebAllowedObject(L"__REACT_WEB_VIEW_BRIDGE", m_webBridge);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReactWebView::OnMessagePosted(hstring const& message)
|
||||||
|
{
|
||||||
|
HandleMessageFromJS(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactWebView::OnNavigationCompleted(winrt::WebView const& webView, winrt::WebViewNavigationCompletedEventArgs const& /*args*/) {
|
void ReactWebView::OnNavigationCompleted(winrt::WebView const& webView, winrt::WebViewNavigationCompletedEventArgs const& /*args*/) {
|
||||||
m_reactContext.DispatchEvent(
|
m_reactContext.DispatchEvent(
|
||||||
webView,
|
*this,
|
||||||
L"topLoadingFinish",
|
L"topLoadingFinish",
|
||||||
[&](winrt::IJSValueWriter const& eventDataWriter) noexcept {
|
[&](winrt::IJSValueWriter const& eventDataWriter) noexcept {
|
||||||
eventDataWriter.WriteObjectBegin();
|
eventDataWriter.WriteObjectBegin();
|
||||||
WriteWebViewNavigationEventArg(eventDataWriter);
|
WriteWebViewNavigationEventArg(webView, eventDataWriter);
|
||||||
eventDataWriter.WriteObjectEnd();
|
eventDataWriter.WriteObjectEnd();
|
||||||
});
|
});
|
||||||
|
|
||||||
winrt::hstring windowAlert = L"window.alert = function (msg) {window.external.notify(`{\"type\":\"__alert\",\"message\":\"${msg}\"}`)};";
|
if (m_messagingEnabled) {
|
||||||
winrt::hstring postMessage = L"window.ReactNativeWebView = {postMessage: function (data) {window.external.notify(String(data))}};";
|
winrt::hstring windowAlert = L"window.alert = function (msg) {__REACT_WEB_VIEW_BRIDGE.postMessage(`{\"type\":\"__alert\",\"message\":\"${msg}\"}`)};";
|
||||||
m_webView.InvokeScriptAsync(L"eval", { windowAlert + postMessage });
|
winrt::hstring postMessage = L"window.ReactNativeWebView = {postMessage: function (data) {__REACT_WEB_VIEW_BRIDGE.postMessage(String(data))}};";
|
||||||
|
webView.InvokeScriptAsync(L"eval", { windowAlert + postMessage });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactWebView::OnNavigationFailed(winrt::IInspectable const& /*sender*/, winrt::WebViewNavigationFailedEventArgs const& args) {
|
void ReactWebView::OnNavigationFailed(winrt::IInspectable const& /*sender*/, winrt::WebViewNavigationFailedEventArgs const& args) {
|
||||||
m_reactContext.DispatchEvent(
|
m_reactContext.DispatchEvent(
|
||||||
m_webView,
|
*this,
|
||||||
L"topLoadingError",
|
L"topLoadingError",
|
||||||
[&](winrt::IJSValueWriter const& eventDataWriter) noexcept {
|
[&](winrt::IJSValueWriter const& eventDataWriter) noexcept {
|
||||||
auto httpCode = static_cast<int32_t>(args.WebErrorStatus());
|
auto httpCode = static_cast<int32_t>(args.WebErrorStatus());
|
||||||
eventDataWriter.WriteObjectBegin();
|
eventDataWriter.WriteObjectBegin();
|
||||||
{
|
{
|
||||||
WriteProperty(eventDataWriter, L"code", httpCode);
|
WriteProperty(eventDataWriter, L"code", httpCode);
|
||||||
WriteWebViewNavigationEventArg(eventDataWriter);
|
WriteWebViewNavigationEventArg(m_webView, eventDataWriter);
|
||||||
}
|
}
|
||||||
eventDataWriter.WriteObjectEnd();
|
eventDataWriter.WriteObjectEnd();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactWebView::OnScriptNotify(winrt::IInspectable const& /*sender*/, winrt::Windows::UI::Xaml::Controls::NotifyEventArgs const& args) {
|
void ReactWebView::HandleMessageFromJS(winrt::hstring const& message) {
|
||||||
winrt::JsonObject jsonObject;
|
winrt::JsonObject jsonObject;
|
||||||
if (winrt::JsonObject::TryParse(args.Value(), jsonObject) && jsonObject.HasKey(L"type")) {
|
if (winrt::JsonObject::TryParse(message, jsonObject) && jsonObject.HasKey(L"type")) {
|
||||||
auto type = jsonObject.GetNamedString(L"type");
|
auto type = jsonObject.GetNamedString(L"type");
|
||||||
if (type == L"__alert") {
|
if (type == L"__alert") {
|
||||||
auto dialog = winrt::MessageDialog(jsonObject.GetNamedString(L"message"));
|
auto dialog = winrt::MessageDialog(jsonObject.GetNamedString(L"message"));
|
||||||
dialog.Commands().Append(winrt::UICommand(L"OK"));
|
dialog.Commands().Append(winrt::UICommand(L"OK"));
|
||||||
dialog.ShowAsync();
|
dialog.ShowAsync();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PostMessage(winrt::hstring(args.Value()));
|
m_reactContext.DispatchEvent(
|
||||||
|
*this,
|
||||||
|
L"topMessage",
|
||||||
|
[&](winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter) noexcept {
|
||||||
|
eventDataWriter.WriteObjectBegin();
|
||||||
|
{
|
||||||
|
WriteProperty(eventDataWriter, L"data", message);
|
||||||
|
}
|
||||||
|
eventDataWriter.WriteObjectEnd();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactWebView::PostMessage(winrt::hstring const& message) {
|
void ReactWebView::SetMessagingEnabled(bool enabled) {
|
||||||
m_reactContext.DispatchEvent(
|
m_messagingEnabled = enabled;
|
||||||
m_webView,
|
|
||||||
L"topMessage",
|
|
||||||
[&](winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter) noexcept {
|
|
||||||
eventDataWriter.WriteObjectBegin();
|
|
||||||
{
|
|
||||||
WriteProperty(eventDataWriter, L"data", message);
|
|
||||||
}
|
|
||||||
eventDataWriter.WriteObjectEnd();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace winrt::ReactNativeWebView::implementation
|
} // namespace winrt::ReactNativeWebView::implementation
|
|
@ -7,28 +7,35 @@
|
||||||
#include "NativeModules.h"
|
#include "NativeModules.h"
|
||||||
#include "ReactWebView.g.h"
|
#include "ReactWebView.g.h"
|
||||||
|
|
||||||
|
#include "winrt/WebViewBridgeComponent.h"
|
||||||
|
|
||||||
|
using namespace winrt::WebViewBridgeComponent;
|
||||||
|
|
||||||
namespace winrt::ReactNativeWebView::implementation {
|
namespace winrt::ReactNativeWebView::implementation {
|
||||||
|
|
||||||
class ReactWebView : public ReactWebViewT<ReactWebView> {
|
class ReactWebView : public ReactWebViewT<ReactWebView> {
|
||||||
public:
|
public:
|
||||||
ReactWebView(Microsoft::ReactNative::IReactContext const& reactContext);
|
ReactWebView(Microsoft::ReactNative::IReactContext const& reactContext);
|
||||||
winrt::Windows::UI::Xaml::Controls::WebView GetView();
|
void SetMessagingEnabled(bool enabled);
|
||||||
void PostMessage(winrt::hstring const& message);
|
~ReactWebView();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_messagingEnabled{ true };
|
||||||
winrt::Windows::UI::Xaml::Controls::WebView m_webView{ nullptr };
|
winrt::Windows::UI::Xaml::Controls::WebView m_webView{ nullptr };
|
||||||
Microsoft::ReactNative::IReactContext m_reactContext{ nullptr };
|
Microsoft::ReactNative::IReactContext m_reactContext{ nullptr };
|
||||||
|
WebBridge m_webBridge{ nullptr };
|
||||||
|
winrt::event_token m_messageToken;
|
||||||
winrt::Windows::UI::Xaml::Controls::WebView::NavigationStarting_revoker m_navigationStartingRevoker{};
|
winrt::Windows::UI::Xaml::Controls::WebView::NavigationStarting_revoker m_navigationStartingRevoker{};
|
||||||
winrt::Windows::UI::Xaml::Controls::WebView::NavigationCompleted_revoker m_navigationCompletedRevoker{};
|
winrt::Windows::UI::Xaml::Controls::WebView::NavigationCompleted_revoker m_navigationCompletedRevoker{};
|
||||||
winrt::Windows::UI::Xaml::Controls::WebView::NavigationFailed_revoker m_navigationFailedRevoker{};
|
winrt::Windows::UI::Xaml::Controls::WebView::NavigationFailed_revoker m_navigationFailedRevoker{};
|
||||||
winrt::Windows::UI::Xaml::Controls::WebView::ScriptNotify_revoker m_scriptNotifyRevoker{};
|
|
||||||
|
|
||||||
|
void HandleMessageFromJS(winrt::hstring const& message);
|
||||||
void RegisterEvents();
|
void RegisterEvents();
|
||||||
void WriteWebViewNavigationEventArg(winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter);
|
void WriteWebViewNavigationEventArg(winrt::Windows::UI::Xaml::Controls::WebView const& sender, winrt::Microsoft::ReactNative::IJSValueWriter const& eventDataWriter);
|
||||||
void OnNavigationStarting(winrt::Windows::UI::Xaml::Controls::WebView const& sender, winrt::Windows::UI::Xaml::Controls::WebViewNavigationStartingEventArgs const& args);
|
void OnNavigationStarting(winrt::Windows::UI::Xaml::Controls::WebView const& sender, winrt::Windows::UI::Xaml::Controls::WebViewNavigationStartingEventArgs const& args);
|
||||||
void OnNavigationCompleted(winrt::Windows::UI::Xaml::Controls::WebView const& sender, winrt::Windows::UI::Xaml::Controls::WebViewNavigationCompletedEventArgs const& args);
|
void OnNavigationCompleted(winrt::Windows::UI::Xaml::Controls::WebView const& sender, winrt::Windows::UI::Xaml::Controls::WebViewNavigationCompletedEventArgs const& args);
|
||||||
void OnNavigationFailed(winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::Controls::WebViewNavigationFailedEventArgs const& args);
|
void OnNavigationFailed(winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::Controls::WebViewNavigationFailedEventArgs const& args);
|
||||||
void OnScriptNotify(winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::Controls::NotifyEventArgs const& args);
|
void OnMessagePosted(hstring const& message);
|
||||||
};
|
};
|
||||||
} // namespace winrt::ReactNativeWebView::implementation
|
} // namespace winrt::ReactNativeWebView::implementation
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ namespace ReactNativeWebView{
|
||||||
[default_interface]
|
[default_interface]
|
||||||
runtimeclass ReactWebView : Windows.UI.Xaml.Controls.UserControl{
|
runtimeclass ReactWebView : Windows.UI.Xaml.Controls.UserControl{
|
||||||
ReactWebView(Microsoft.ReactNative.IReactContext context);
|
ReactWebView(Microsoft.ReactNative.IReactContext context);
|
||||||
Windows.UI.Xaml.Controls.WebView GetView();
|
void SetMessagingEnabled(Boolean enabled);
|
||||||
void PostMessage(String message);
|
|
||||||
};
|
};
|
||||||
} // namespace ReactNativeWebView
|
} // namespace ReactNativeWebView
|
|
@ -23,8 +23,8 @@ namespace winrt::ReactNativeWebView::implementation {
|
||||||
}
|
}
|
||||||
|
|
||||||
winrt::FrameworkElement ReactWebViewManager::CreateView() noexcept {
|
winrt::FrameworkElement ReactWebViewManager::CreateView() noexcept {
|
||||||
m_reactWebView = *winrt::make_self<ReactWebView>(m_reactContext);
|
auto view = winrt::ReactNativeWebView::ReactWebView(m_reactContext);
|
||||||
return m_reactWebView.GetView();
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
// IViewManagerWithReactContext
|
// IViewManagerWithReactContext
|
||||||
|
@ -40,50 +40,58 @@ namespace winrt::ReactNativeWebView::implementation {
|
||||||
IMapView<hstring, ViewManagerPropertyType> ReactWebViewManager::NativeProps() noexcept {
|
IMapView<hstring, ViewManagerPropertyType> ReactWebViewManager::NativeProps() noexcept {
|
||||||
auto nativeProps = winrt::single_threaded_map<hstring, ViewManagerPropertyType>();
|
auto nativeProps = winrt::single_threaded_map<hstring, ViewManagerPropertyType>();
|
||||||
nativeProps.Insert(L"source", ViewManagerPropertyType::Map);
|
nativeProps.Insert(L"source", ViewManagerPropertyType::Map);
|
||||||
|
nativeProps.Insert(L"backgroundColor", ViewManagerPropertyType::Color);
|
||||||
|
nativeProps.Insert(L"messagingEnabled", ViewManagerPropertyType::Boolean);
|
||||||
return nativeProps.GetView();
|
return nativeProps.GetView();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReactWebViewManager::UpdateProperties(
|
void ReactWebViewManager::UpdateProperties(
|
||||||
FrameworkElement const& view,
|
FrameworkElement const& view,
|
||||||
IJSValueReader const& propertyMapReader) noexcept {
|
IJSValueReader const& propertyMapReader) noexcept {
|
||||||
if (auto webView = view.try_as<winrt::WebView>()) {
|
auto control = view.as<winrt::UserControl>();
|
||||||
const JSValueObject& propertyMap = JSValueObject::ReadFrom(propertyMapReader);
|
auto content = control.Content();
|
||||||
|
auto webView = content.as<winrt::WebView>();
|
||||||
|
const JSValueObject& propertyMap = JSValueObject::ReadFrom(propertyMapReader);
|
||||||
|
|
||||||
for (auto const& pair : propertyMap) {
|
for (auto const& pair : propertyMap) {
|
||||||
auto const& propertyName = pair.first;
|
auto const& propertyName = pair.first;
|
||||||
auto const& propertyValue = pair.second;
|
auto const& propertyValue = pair.second;
|
||||||
if (propertyValue.IsNull()) continue;
|
if (propertyValue.IsNull()) continue;
|
||||||
|
|
||||||
if (propertyName == "source") {
|
if (propertyName == "source") {
|
||||||
auto const& srcMap = propertyValue.AsObject();
|
auto const& srcMap = propertyValue.AsObject();
|
||||||
if (srcMap.find("uri") != srcMap.end()) {
|
if (srcMap.find("uri") != srcMap.end()) {
|
||||||
auto uriString = srcMap.at("uri").AsString();
|
auto uriString = srcMap.at("uri").AsString();
|
||||||
if (uriString.length() == 0) {
|
if (uriString.length() == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
bool isPackagerAsset = false;
|
|
||||||
if (srcMap.find("__packager_asset") != srcMap.end()) {
|
|
||||||
isPackagerAsset = srcMap.at("__packager_asset").AsBoolean();
|
|
||||||
}
|
|
||||||
if (isPackagerAsset && uriString.find("file://") == 0) {
|
|
||||||
auto bundleRootPath = winrt::to_string(ReactNativeHost().InstanceSettings().BundleRootPath());
|
|
||||||
uriString.replace(0, 7, bundleRootPath.empty() ? "ms-appx-web:///Bundle/" : bundleRootPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
webView.Navigate(winrt::Uri(to_hstring(uriString)));
|
|
||||||
}
|
}
|
||||||
else if (srcMap.find("html") != srcMap.end()) {
|
|
||||||
auto htmlString = srcMap.at("html").AsString();
|
bool isPackagerAsset = false;
|
||||||
webView.NavigateToString(to_hstring(htmlString));
|
if (srcMap.find("__packager_asset") != srcMap.end()) {
|
||||||
|
isPackagerAsset = srcMap.at("__packager_asset").AsBoolean();
|
||||||
}
|
}
|
||||||
|
if (isPackagerAsset && uriString.find("file://") == 0) {
|
||||||
|
auto bundleRootPath = winrt::to_string(ReactNativeHost().InstanceSettings().BundleRootPath());
|
||||||
|
uriString.replace(0, 7, bundleRootPath.empty() ? "ms-appx-web:///Bundle/" : bundleRootPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
webView.Navigate(winrt::Uri(to_hstring(uriString)));
|
||||||
}
|
}
|
||||||
else if (propertyName == "backgroundColor") {
|
else if (srcMap.find("html") != srcMap.end()) {
|
||||||
auto color = propertyValue.To<winrt::Color>();
|
auto htmlString = srcMap.at("html").AsString();
|
||||||
webView.DefaultBackgroundColor(color.A==0 ? winrt::Colors::Transparent() : color);
|
webView.NavigateToString(to_hstring(htmlString));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else if (propertyName == "backgroundColor") {
|
||||||
|
auto color = propertyValue.To<winrt::Color>();
|
||||||
|
webView.DefaultBackgroundColor(color.A==0 ? winrt::Colors::Transparent() : color);
|
||||||
|
}
|
||||||
|
else if (propertyName == "messagingEnabled") {
|
||||||
|
auto messagingEnabled = propertyValue.To<bool>();
|
||||||
|
auto reactWebView = view.as<ReactNativeWebView::ReactWebView>();
|
||||||
|
reactWebView.SetMessagingEnabled(messagingEnabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// IViewManagerWithExportedEventTypeConstants
|
// IViewManagerWithExportedEventTypeConstants
|
||||||
|
@ -108,7 +116,6 @@ namespace winrt::ReactNativeWebView::implementation {
|
||||||
commands.Append(L"reload");
|
commands.Append(L"reload");
|
||||||
commands.Append(L"stopLoading");
|
commands.Append(L"stopLoading");
|
||||||
commands.Append(L"injectJavaScript");
|
commands.Append(L"injectJavaScript");
|
||||||
commands.Append(L"postMessage");
|
|
||||||
return commands.GetView();
|
return commands.GetView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,30 +123,30 @@ namespace winrt::ReactNativeWebView::implementation {
|
||||||
FrameworkElement const& view,
|
FrameworkElement const& view,
|
||||||
winrt::hstring const& commandId,
|
winrt::hstring const& commandId,
|
||||||
winrt::IJSValueReader const& commandArgsReader) noexcept {
|
winrt::IJSValueReader const& commandArgsReader) noexcept {
|
||||||
|
auto control = view.as<winrt::UserControl>();
|
||||||
|
auto content = control.Content();
|
||||||
|
auto webView = content.as<winrt::WebView>();
|
||||||
auto commandArgs = JSValue::ReadArrayFrom(commandArgsReader);
|
auto commandArgs = JSValue::ReadArrayFrom(commandArgsReader);
|
||||||
if (auto webView = view.try_as<winrt::WebView>()) {
|
|
||||||
if (commandId == L"goForward") {
|
if (commandId == L"goForward") {
|
||||||
if (webView.CanGoForward()) {
|
if (webView.CanGoForward()) {
|
||||||
webView.GoForward();
|
webView.GoForward();
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (commandId == L"goBack") {
|
|
||||||
if (webView.CanGoBack()) {
|
|
||||||
webView.GoBack();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (commandId == L"reload") {
|
|
||||||
webView.Refresh();
|
|
||||||
}
|
|
||||||
else if (commandId == L"stopLoading") {
|
|
||||||
webView.Stop();
|
|
||||||
}
|
|
||||||
else if (commandId == L"injectJavaScript") {
|
|
||||||
webView.InvokeScriptAsync(L"eval", { winrt::to_hstring(commandArgs[0].AsString()) });
|
|
||||||
} else if(commandId == L"postMessage") {
|
|
||||||
m_reactWebView.PostMessage(winrt::to_hstring(commandArgs[0].AsString()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (commandId == L"goBack") {
|
||||||
|
if (webView.CanGoBack()) {
|
||||||
|
webView.GoBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (commandId == L"reload") {
|
||||||
|
webView.Refresh();
|
||||||
|
}
|
||||||
|
else if (commandId == L"stopLoading") {
|
||||||
|
webView.Stop();
|
||||||
|
}
|
||||||
|
else if (commandId == L"injectJavaScript") {
|
||||||
|
webView.InvokeScriptAsync(L"eval", { winrt::to_hstring(commandArgs[0].AsString()) });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace winrt::ReactWebView::implementation
|
} // namespace winrt::ReactWebView::implementation
|
|
@ -47,7 +47,6 @@ namespace winrt::ReactNativeWebView::implementation {
|
||||||
winrt::Microsoft::ReactNative::IJSValueReader const& commandArgsReader) noexcept;
|
winrt::Microsoft::ReactNative::IJSValueReader const& commandArgsReader) noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
winrt::ReactNativeWebView::ReactWebView m_reactWebView{ nullptr };
|
|
||||||
winrt::Microsoft::ReactNative::IReactContext m_reactContext{ nullptr };
|
winrt::Microsoft::ReactNative::IReactContext m_reactContext{ nullptr };
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.190730.2" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.200316.3" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<!--
|
||||||
|
To customize common C++/WinRT project properties:
|
||||||
|
* right-click the project node
|
||||||
|
* expand the Common Properties item
|
||||||
|
* select the C++/WinRT property page
|
||||||
|
|
||||||
|
For more advanced scenarios, and complete documentation, please see:
|
||||||
|
https://github.com/Microsoft/cppwinrt/tree/master/nuget
|
||||||
|
-->
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include "pch.h"
|
||||||
|
#include "WebBridge.h"
|
||||||
|
#include "WebBridge.g.cpp"
|
||||||
|
|
||||||
|
namespace winrt::WebViewBridgeComponent::implementation
|
||||||
|
{
|
||||||
|
void WebBridge::PostMessage(hstring const& message)
|
||||||
|
{
|
||||||
|
m_messageEvent(*this, message);
|
||||||
|
}
|
||||||
|
winrt::event_token WebBridge::MessagePostEvent(Windows::Foundation::EventHandler<hstring> const& handler)
|
||||||
|
{
|
||||||
|
return m_messageEvent.add(handler);
|
||||||
|
}
|
||||||
|
void WebBridge::MessagePostEvent(winrt::event_token const& token) noexcept
|
||||||
|
{
|
||||||
|
m_messageEvent.remove(token);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
#pragma once
|
||||||
|
#include "WebBridge.g.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace winrt::WebViewBridgeComponent::implementation
|
||||||
|
{
|
||||||
|
struct WebBridge : WebBridgeT<WebBridge>
|
||||||
|
{
|
||||||
|
WebBridge() = default;
|
||||||
|
|
||||||
|
void PostMessage(hstring const& message);
|
||||||
|
winrt::event_token MessagePostEvent(Windows::Foundation::EventHandler<hstring> const& handler);
|
||||||
|
void MessagePostEvent(winrt::event_token const& token) noexcept;
|
||||||
|
|
||||||
|
private:
|
||||||
|
winrt::event<Windows::Foundation::EventHandler<winrt::hstring>> m_messageEvent;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
namespace winrt::WebViewBridgeComponent::factory_implementation
|
||||||
|
{
|
||||||
|
struct WebBridge : WebBridgeT<WebBridge, implementation::WebBridge>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
namespace WebViewBridgeComponent
|
||||||
|
{
|
||||||
|
[default_interface]
|
||||||
|
[allowforweb]
|
||||||
|
runtimeclass WebBridge
|
||||||
|
{
|
||||||
|
WebBridge();
|
||||||
|
void PostMessage(String message);
|
||||||
|
event Windows.Foundation.EventHandler<String> MessagePostEvent;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
EXPORTS
|
||||||
|
DllCanUnloadNow = WINRT_CanUnloadNow PRIVATE
|
||||||
|
DllGetActivationFactory = WINRT_GetActivationFactory PRIVATE
|
|
@ -0,0 +1,158 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||||
|
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||||
|
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
|
||||||
|
<MinimalCoreWin>true</MinimalCoreWin>
|
||||||
|
<ProjectGuid>{fcb612ad-facc-410c-828c-24b5940b2762}</ProjectGuid>
|
||||||
|
<ProjectName>WebViewBridgeComponent</ProjectName>
|
||||||
|
<RootNamespace>WebViewBridgeComponent</RootNamespace>
|
||||||
|
<DefaultLanguage>en-US</DefaultLanguage>
|
||||||
|
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
|
||||||
|
<AppContainerApplication>true</AppContainerApplication>
|
||||||
|
<ApplicationType>Windows Store</ApplicationType>
|
||||||
|
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
|
||||||
|
<WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.18362.0</WindowsTargetPlatformVersion>
|
||||||
|
<WindowsTargetPlatformMinVersion>10.0.17134.0</WindowsTargetPlatformMinVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|ARM">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|ARM64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<PlatformToolset>v140</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<GenerateManifest>false</GenerateManifest>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="Shared">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="PropertySheet.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
<AdditionalOptions>%(AdditionalOptions) /bigobj</AdditionalOptions>
|
||||||
|
<!--Temporarily disable cppwinrt heap enforcement to work around xaml compiler generated std::shared_ptr use -->
|
||||||
|
<AdditionalOptions Condition="'$(CppWinRTHeapEnforcement)'==''">/DWINRT_NO_MAKE_DETECTION %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
<DisableSpecificWarnings>
|
||||||
|
</DisableSpecificWarnings>
|
||||||
|
<PreprocessorDefinitions>_WINRT_DLL;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||||
|
<ModuleDefinitionFile>WebViewBridgeComponent.def</ModuleDefinitionFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="pch.h" />
|
||||||
|
<ClInclude Include="WebBridge.h">
|
||||||
|
<DependentUpon>WebBridge.idl</DependentUpon>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="pch.cpp">
|
||||||
|
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="WebBridge.cpp">
|
||||||
|
<DependentUpon>WebBridge.idl</DependentUpon>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="$(GeneratedFilesDir)module.g.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Midl Include="WebBridge.idl" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
<None Include="WebViewBridgeComponent.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="PropertySheet.props" />
|
||||||
|
<Text Include="readme.txt">
|
||||||
|
<DeploymentContent>false</DeploymentContent>
|
||||||
|
</Text>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
|
<Error Condition="!Exists('$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
|
</Target>
|
||||||
|
</Project>
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Resources">
|
||||||
|
<UniqueIdentifier>accd3aa8-1ba0-4223-9bbe-0c431709210b</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Generated Files">
|
||||||
|
<UniqueIdentifier>{926ab91d-31b4-48c3-b9a4-e681349f27f0}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="pch.cpp" />
|
||||||
|
<ClCompile Include="WebBridge.cpp" />
|
||||||
|
<ClCompile Include="$(GeneratedFilesDir)module.g.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="pch.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="WebViewBridgeComponent.def" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="PropertySheet.props" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Text Include="readme.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Midl Include="WebBridge.idl" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.200729.8" targetFramework="native" />
|
||||||
|
</packages>
|
|
@ -0,0 +1 @@
|
||||||
|
#include "pch.h"
|
|
@ -0,0 +1,4 @@
|
||||||
|
#pragma once
|
||||||
|
#include <unknwn.h>
|
||||||
|
#include <winrt/Windows.Foundation.h>
|
||||||
|
#include <winrt/Windows.Foundation.Collections.h>
|
|
@ -0,0 +1,23 @@
|
||||||
|
========================================================================
|
||||||
|
C++/WinRT WebViewBridgeComponent Project Overview
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
This project demonstrates how to get started authoring Windows Runtime
|
||||||
|
classes directly with standard C++, using the C++/WinRT SDK component
|
||||||
|
to generate implementation headers from interface (IDL) files. The
|
||||||
|
generated Windows Runtime component binary and WinMD files should then
|
||||||
|
be bundled with the Universal Windows Platform (UWP) app consuming them.
|
||||||
|
|
||||||
|
Steps:
|
||||||
|
1. Create an interface (IDL) file to define your Windows Runtime class,
|
||||||
|
its default interface, and any other interfaces it implements.
|
||||||
|
2. Build the project once to generate module.g.cpp, module.h.cpp, and
|
||||||
|
implementation templates under the "Generated Files" folder, as
|
||||||
|
well as skeleton class definitions under "Generated Files\sources".
|
||||||
|
3. Use the skeleton class definitions for reference to implement your
|
||||||
|
Windows Runtime classes.
|
||||||
|
|
||||||
|
========================================================================
|
||||||
|
Learn more about C++/WinRT here:
|
||||||
|
http://aka.ms/cppwinrt/
|
||||||
|
========================================================================
|
Loading…
Reference in New Issue