Browse Source

fix(windows): Fix windows local asset path (#1335 by @kaiguo)

[skip ci]
Kai Guo 4 years ago
parent
commit
20a3f90c0f
No account linked to committer's email address

+ 1
- 1
docs/Guide.md View File

55
 
55
 
56
 ### Loading local HTML files
56
 ### Loading local HTML files
57
 
57
 
58
-Sometimes you would have bundled an HTML file along with the app and would like to load the HTML asset into your WebView. To do this on iOS, you can just import the html file like any other asset as shown below.
58
+Sometimes you would have bundled an HTML file along with the app and would like to load the HTML asset into your WebView. To do this on iOS and Windows, you can just import the html file like any other asset as shown below.
59
 
59
 
60
 ```js
60
 ```js
61
 import React, { Component } from 'react';
61
 import React, { Component } from 'react';

+ 14
- 0
example/App.tsx View File

16
 import Downloads from './examples/Downloads';
16
 import Downloads from './examples/Downloads';
17
 import Uploads from './examples/Uploads';
17
 import Uploads from './examples/Uploads';
18
 import Injection from './examples/Injection';
18
 import Injection from './examples/Injection';
19
+import LocalPageLoad from './examples/LocalPageLoad';
19
 
20
 
20
 const TESTS = {
21
 const TESTS = {
21
   Alerts: {
22
   Alerts: {
66
       return <Injection />;
67
       return <Injection />;
67
     },
68
     },
68
   },
69
   },
70
+  PageLoad: {
71
+    title: 'LocalPageLoad',
72
+    testId: 'LocalPageLoad',
73
+    description: 'Local Page load test',
74
+    render() {
75
+      return <LocalPageLoad />;
76
+    },
77
+  },
69
 };
78
 };
70
 
79
 
71
 type Props = {};
80
 type Props = {};
124
             title="Injection"
133
             title="Injection"
125
             onPress={() => this._changeTest('Injection')}
134
             onPress={() => this._changeTest('Injection')}
126
           />
135
           />
136
+          <Button
137
+            testID="testType_pageLoad"
138
+            title="LocalPageLoad"
139
+            onPress={() => this._changeTest('PageLoad')}
140
+          />
127
           {Platform.OS == "ios" && <Button
141
           {Platform.OS == "ios" && <Button
128
             testID="testType_downloads"
142
             testID="testType_downloads"
129
             title="Downloads"
143
             title="Downloads"

+ 9
- 0
example/assets/test.html View File

1
+<!doctype html>
2
+<html>
3
+    <head>
4
+        <title>Test</title>
5
+    </head>
6
+    <body>
7
+        <h2>Local page test</h2>
8
+    </body>
9
+</html>

+ 16
- 0
example/examples/LocalPageLoad.tsx View File

1
+import React, {Component} from 'react';
2
+import {View, Text, Alert, TextInput, Button} from 'react-native';
3
+import WebView from 'react-native-webview';
4
+const localHtmlFile = require('../assets/test.html');
5
+
6
+export default class LocalPageLoad extends Component<Props, State> {
7
+    render() {
8
+      return (
9
+        <View>
10
+            <View style={{ width: '100%', height: '100%' }}>
11
+                <WebView source={localHtmlFile}/>
12
+          </View>
13
+        </View>
14
+      );
15
+    }
16
+  }

+ 7
- 8
windows/ReactNativeWebView/ReactWebViewManager.cpp View File

58
                     auto const& srcMap = propertyValue.AsObject();
58
                     auto const& srcMap = propertyValue.AsObject();
59
                     if (srcMap.find("uri") != srcMap.end()) {
59
                     if (srcMap.find("uri") != srcMap.end()) {
60
                         auto uriString = srcMap.at("uri").AsString();
60
                         auto uriString = srcMap.at("uri").AsString();
61
-                        // non-uri sources not yet supported
62
                         if (uriString.length() == 0) {
61
                         if (uriString.length() == 0) {
63
                             continue;
62
                             continue;
64
                         }
63
                         }
67
                         if (srcMap.find("__packager_asset") != srcMap.end()) {
66
                         if (srcMap.find("__packager_asset") != srcMap.end()) {
68
                             isPackagerAsset = srcMap.at("__packager_asset").AsBoolean();
67
                             isPackagerAsset = srcMap.at("__packager_asset").AsBoolean();
69
                         }
68
                         }
70
-
71
-                        if (isPackagerAsset && uriString.find("assets") == 0) {
72
-                            uriString.replace(0, 6, "ms-appx://");
69
+                        if (isPackagerAsset && uriString.find("file://") == 0) {
70
+                            auto bundleRootPath = winrt::to_string(ReactNativeHost().InstanceSettings().BundleRootPath());
71
+                            uriString.replace(0, 7, bundleRootPath.empty() ? "ms-appx-web:///Bundle/" : bundleRootPath);
73
                         }
72
                         }
74
 
73
 
75
                         webView.Navigate(winrt::Uri(to_hstring(uriString)));
74
                         webView.Navigate(winrt::Uri(to_hstring(uriString)));
94
 
93
 
95
     ConstantProviderDelegate ReactWebViewManager::ExportedCustomDirectEventTypeConstants() noexcept {
94
     ConstantProviderDelegate ReactWebViewManager::ExportedCustomDirectEventTypeConstants() noexcept {
96
         return [](winrt::IJSValueWriter const& constantWriter) {
95
         return [](winrt::IJSValueWriter const& constantWriter) {
97
-            WriteCustomDirectEventTypeConstant(constantWriter, "onLoadingStart");
98
-            WriteCustomDirectEventTypeConstant(constantWriter, "onLoadingFinish");
99
-            WriteCustomDirectEventTypeConstant(constantWriter, "onLoadingError");
100
-            WriteCustomDirectEventTypeConstant(constantWriter, "onMessage");
96
+            WriteCustomDirectEventTypeConstant(constantWriter, "LoadingStart");
97
+            WriteCustomDirectEventTypeConstant(constantWriter, "LoadingFinish");
98
+            WriteCustomDirectEventTypeConstant(constantWriter, "LoadingError");
99
+            WriteCustomDirectEventTypeConstant(constantWriter, "Message");
101
         };
100
         };
102
     }
101
     }
103
 
102
 

+ 2
- 34
yarn.lock View File

5233
   dependencies:
5233
   dependencies:
5234
     ms "^2.1.1"
5234
     ms "^2.1.1"
5235
 
5235
 
5236
-debuglog@*, debuglog@^1.0.1:
5236
+debuglog@^1.0.1:
5237
   version "1.0.1"
5237
   version "1.0.1"
5238
   resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
5238
   resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
5239
   integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
5239
   integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
7225
     pkg-dir "^3.0.0"
7225
     pkg-dir "^3.0.0"
7226
     resolve-cwd "^2.0.0"
7226
     resolve-cwd "^2.0.0"
7227
 
7227
 
7228
-imurmurhash@*, imurmurhash@^0.1.4:
7228
+imurmurhash@^0.1.4:
7229
   version "0.1.4"
7229
   version "0.1.4"
7230
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
7230
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
7231
   integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
7231
   integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
8733
   dependencies:
8733
   dependencies:
8734
     signal-exit "^3.0.2"
8734
     signal-exit "^3.0.2"
8735
 
8735
 
8736
-lodash._baseindexof@*:
8737
-  version "3.1.0"
8738
-  resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c"
8739
-  integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=
8740
-
8741
 lodash._baseuniq@~4.6.0:
8736
 lodash._baseuniq@~4.6.0:
8742
   version "4.6.0"
8737
   version "4.6.0"
8743
   resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8"
8738
   resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8"
8746
     lodash._createset "~4.0.0"
8741
     lodash._createset "~4.0.0"
8747
     lodash._root "~3.0.0"
8742
     lodash._root "~3.0.0"
8748
 
8743
 
8749
-lodash._bindcallback@*:
8750
-  version "3.0.1"
8751
-  resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
8752
-  integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4=
8753
-
8754
-lodash._cacheindexof@*:
8755
-  version "3.0.2"
8756
-  resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92"
8757
-  integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=
8758
-
8759
-lodash._createcache@*:
8760
-  version "3.1.2"
8761
-  resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093"
8762
-  integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=
8763
-  dependencies:
8764
-    lodash._getnative "^3.0.0"
8765
-
8766
 lodash._createset@~4.0.0:
8744
 lodash._createset@~4.0.0:
8767
   version "4.0.3"
8745
   version "4.0.3"
8768
   resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
8746
   resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
8769
   integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=
8747
   integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=
8770
 
8748
 
8771
-lodash._getnative@*, lodash._getnative@^3.0.0:
8772
-  version "3.9.1"
8773
-  resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
8774
-  integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
8775
-
8776
 lodash._root@~3.0.0:
8749
 lodash._root@~3.0.0:
8777
   version "3.0.1"
8750
   version "3.0.1"
8778
   resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
8751
   resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
8843
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
8816
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
8844
   integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
8817
   integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
8845
 
8818
 
8846
-lodash.restparam@*:
8847
-  version "3.6.1"
8848
-  resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
8849
-  integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=
8850
-
8851
 lodash.set@^4.3.2:
8819
 lodash.set@^4.3.2:
8852
   version "4.3.2"
8820
   version "4.3.2"
8853
   resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
8821
   resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"