WebBrowser.InvokeScript()引发错误:80020006

时间:2014-01-29 08:12:08

标签: c# javascript windows-phone-8 webbrowser-control

我正在开发Windows Phone 8应用程序,我是Windows Phone 8的新手。

我正在使用WebBrowser Control并尝试加载具有javascript的html页面。

在button_Click事件上我正在调用Webbrowser.InvokeScript(“JavascriptFunctionName”),但它总是抛出错误:80020006,即使WebBrowser.isScriptEnabled = true。

以下是代码

Html页面:MyHtmlPage.html

<!DOCTYPE html>
<html>
<head title="test">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
    html {
        height: 100%;
    }

    body {
        height: 100%;
        margin: 0;
        padding: 0;
    }

    #map-canvas {
        height: 100%;
    }
</style>

<script type="text/javascript">
    function initialize() {

        var helloText = document.getElementById("Hello");
        helloText.textContent = "Initialized";

        return ("Initialize");

    }

</script>
</head>
<body>
    <div id="test-canvas" />
    <label id="Hello">Hello</label>
</body>
</html>

Cs文件:MainPage.cs

private string TestUri = @"Html/Test.html"; 
private string stringHtml = string.Empty;

public MainPage()
{
    InitializeComponent();
    WebBrowser.IsScriptEnabled = true;
    WebBrowser.IsGeolocationEnabled = true;
}

private void WebBrowser_Loaded(object sender, RoutedEventArgs e)
{            
    var resource = App.GetResourceStream(new Uri(TestUri, UriKind.Relative));
    stringHtml = new StreamReader(resource.Stream).ReadToEnd();
    WebBrowser.NavigateToString(stringHtml);
}

private void Button_Click(object sender, RoutedEventArgs e)
{
   try
   {
       //Error 
       string returnValue = WebBrowser.InvokeScript("initialize");
   }
   catch(Exception ex)
   {
   }

}

帮帮我...... 感谢。

1 个答案:

答案 0 :(得分:1)

在WP8下使用NavigateToString时,脚本没有被执行。以下测试证明了这一点,身体背景颜色不会变红。

<script type="text/javascript">
    document.body.style.backgroundColor = "red";

    window.initialize = function() {
        document.body.style.backgroundColor = "blue";

        var helloText = document.getElementById("Hello");
        helloText.textContent = "Initialized";

        return ("Initialize");
    }
</script>

一种可能的解决方案是在隔离存储中创建一个临时文件,如described here

另一种选择是导航到包含Navigate("about:blank")的空白页面,处理WebBrowser.LoadCompleted事件,然后按照here所述注入所需的HTML和脚本。