WP8 WebBrowser: inline script works, loaded doesn't

2

Windows Phone 8 app, WebBrowser control. I load a chunk of HTML via NavigateToString (after setting IsScriptEnabled=true). Some time later (long after it's loaded), I'm invoking some JavaScript on the page with InvokeScript.

When I invoke a JavaScript function that's defined inline inside a <script> element, it works as expected. When I invoke one that's defined in an external JS file, it doesn't, and an exception from HRESULT 0x80020006 ("name not found") is thrown.

The external script file is loaded from my app package. In the HTML string, there's a <base> element which contains a file:// URL to the package's folder (retrieved via Package::Current->InstalledLocation), and the <script> element contains just the file name. There are also styles and images in that folder - they load fine.

The HTML has no DOCTYPE and no xmlns - I know those things can sometimes throw JavaScript off.

The external script file is valid - it came straight from Android where it worked on the respective WebView control. The function I'm trying to invoke is empty anyway, to be on the safe side, JavaScript syntax-wise.

This could in theory be some kind of a cross-domain scripting issue. Technically, the script comes from a file:// URL while the page itself comes from no URL at all. Some piece of system code that makes sure no fishy script is called could've gotten in the way.

webbrowser-control
windows-phone
windows-phone-8
asked on Stack Overflow Nov 13, 2012 by Seva Alekseyev • edited Nov 13, 2012 by Seva Alekseyev

3 Answers

2

Found one workaround: load the external script file into a string on startup, once the HTML is loaded (LoadCompleted fires), feed it to the document using JavaScript eval.

answered on Stack Overflow Nov 13, 2012 by Seva Alekseyev • edited Nov 13, 2012 by Seva Alekseyev
1

Here is example of how to inject some script dynamically

Browser.InvokeScript("eval", new string[] { FileUtils.ReadFileContent("app/www/js/console.js") });

Where ReadFileContent could be defined as following https://github.com/sgrebnov/IeMobileDebugger/blob/master/Libraries/Support/FileUtils.cs

Full example https://github.com/sgrebnov/IeMobileDebugger/blob/master/Libraries/IE.Debug.Core/WebPageDebugger.cs

PS. instead of reading script from file you can pass hardcoded string, etc

answered on Stack Overflow Nov 17, 2012 by Sergei Grebnov
0

Are you sure that your script is being loaded? One thing you can do is tuck an alert in there to make sure it is being loaded. My suspicion is that it isn't being loaded.

Any time I have run into this before that has been the case although admittedly I haven't loaded a JS file from Isolated Storage before.

answered on Stack Overflow Nov 14, 2012 by DevTheo

User contributions licensed under CC BY-SA 3.0