diff --git a/tests/app/ui/web-view/test with spaces.html b/tests/app/ui/web-view/test with spaces.html
new file mode 100644
index 000000000..bd87f54e9
--- /dev/null
+++ b/tests/app/ui/web-view/test with spaces.html
@@ -0,0 +1,10 @@
+
+
+
+ MyTitle
+
+
+
+ TestÖ with Spaces
+
+
diff --git a/tests/app/ui/web-view/web-view-tests.ts b/tests/app/ui/web-view/web-view-tests.ts
index 0c40ae9ad..fad742a2c 100644
--- a/tests/app/ui/web-view/web-view-tests.ts
+++ b/tests/app/ui/web-view/web-view-tests.ts
@@ -87,6 +87,40 @@ export class WebViewTest extends testModule.UITest {
// << webview-localfile
}
+ public testLoadLocalFileWithSpaceInPath(done) {
+ let webView = this.testView;
+
+ webView.on(webViewModule.WebView.loadFinishedEvent, function (args: webViewModule.LoadEventData) {
+ let actual;
+ let expectedTitle = 'MyTitle';
+ let expectedHtml = 'TestÖ with Spaces';
+
+ if (webView.ios) {
+ actual = webView.ios.stringByEvaluatingJavaScriptFromString("document.body.innerHTML").trim();
+ } else if (webView.android) {
+ actual = webView.android.getTitle();
+ }
+
+ try {
+ TKUnit.assertNull(args.error, args.error);
+ TKUnit.assertEqual(actual, webView.ios ? expectedHtml : expectedTitle, "File ~/ui/web-view/test.html not loaded properly.");
+ done(null);
+ }
+ catch (e) {
+ done(e);
+ }
+
+ let message;
+ if (!args.error) {
+ message = "WebView finished loading " + args.url;
+ }
+ else {
+ message = "Error loading " + args.url + ": " + args.error;
+ }
+ });
+ webView.src = "~/ui/web-view/test with spaces.html";
+ }
+
public testLoadHTMLString(done) {
let webView = this.testView;
diff --git a/tns-core-modules/ui/web-view/web-view-common.ts b/tns-core-modules/ui/web-view/web-view-common.ts
index cdb958e9b..9931ac45b 100644
--- a/tns-core-modules/ui/web-view/web-view-common.ts
+++ b/tns-core-modules/ui/web-view/web-view-common.ts
@@ -71,6 +71,11 @@ export abstract class WebViewBase extends View implements WebViewDefinition {
src = "file://" + src;
}
+ // loading local files from paths with spaces may fail
+ if (src.toLowerCase().indexOf("file:///") === 0) {
+ src = encodeURI(src);
+ }
+
if (src.toLowerCase().indexOf("http://") === 0 ||
src.toLowerCase().indexOf("https://") === 0 ||
src.toLowerCase().indexOf("file:///") === 0) {