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) {