private async void WebView_ScriptNotify(object sender, NotifyEventArgs e) { string[] urlParts = e.Value.Split('?'); string docLocation = urlParts[0]; Uri docUri = new Uri("ms-appx:///" + docLocation); var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(docUri); var props = await file.GetBasicPropertiesAsync(); var fileSize = props.Size; string range = urlParts[1]; string[] rangeParts = range.Split('&'); string originalRangeStart = rangeParts[0]; ulong rangeStart; // if the range start is negative then read from the end of the file if (originalRangeStart.StartsWith("-")) { ulong rangeStartPositive = (ulong)Math.Abs(Convert.ToInt64(originalRangeStart)); rangeStart = fileSize - rangeStartPositive; } else { rangeStart = Convert.ToUInt64(originalRangeStart); } // if the end range is not specified then it goes to the end of the file ulong rangeEnd = (rangeParts[1].Length == 0) ? fileSize : Convert.ToUInt64(rangeParts[1]); var stream = await file.OpenReadAsync(); stream.Seek(rangeStart); // get the number of bytes to read uint count = (uint)(rangeEnd - rangeStart); var bytes = new byte[count]; using (var dataReader = new DataReader(stream)) { await dataReader.LoadAsync(count); dataReader.ReadBytes(bytes); } string successFunction = string.Format("setTimeout(function() {{ window.CoreControls.PartRetrievers.WinRTPartRetriever.partSuccess('{0}', '{1}'); }}, 0);", Convert.ToBase64String(bytes), originalRangeStart); MyWebView.InvokeScript("eval", new string[] { successFunction }); }