【发布时间】:2019-02-11 22:50:22
【问题描述】:
我正在使用 webview 来显示某个 html 文件,但是,当我调用 InvokeScriptAsync 时,我一直遇到错误。 “未知名称。(来自 HRESULT 的异常:0x80020006 (DISP_E_UNKNOWNNAME))”。即使在 NavigationComplete 或 DOMContentLoaded 中调用脚本也会发生这种情况。
我准备了一个简单的应用程序来调试这个问题,我注意到当脚本位于单独的 .js 文件中时,会发生错误。但是如果放在html文件中就不会报错了。
我希望将脚本放在一个单独的文件中,因为我有很多功能要实现,而且我会使用一些第三方脚本,因此将所有脚本都放在 html 文件中是不可维护的。
顺便说一句,我确实在非通用应用程序中尝试了相同的代码,并且只使用了 Windows 8.1 商店应用程序,即使脚本存储在单独的文件中,它也能正常工作。这就是为什么我必须缺少一些设置才能使其在通用应用程序中工作。
这是我的主页代码:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
MapWebView.NavigationCompleted +=MapWebView_NavigationCompleted;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Uri url = new Uri("ms-appx-web:///Common/Web/SamplePage.html");
MapWebView.Navigate(url);
}
private async void MapWebView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
{
try
{
await MapWebView.InvokeScriptAsync("SayHello", new string[] { "Hello! This is a test parameter" });
}
catch(Exception e)
{
string error = e.Message;
}
}
}
不工作(脚本位于单独的文件 sample.js 中): html 文件:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script type="text/javascript" src="sample.js"></script>
<p>Parameter From Script File:</p> <div id="paramDiv"></div>
</body>
</html>
sample.js 文件:
function SayHello(parameter)
{
document.getElementById('paramDiv').innerHTML = parameter;
}
正在工作(脚本在 html 文件中):
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script>
function SayHello(parameter) {
document.getElementById('paramDiv').innerHTML = parameter;
}
</script>
<p>Parameter From Script File:</p> <div id="paramDiv"></div>
</body>
</html>
这是我的项目的设置: 我将我的项目设置为通用应用程序。在通用应用程序的共享代码部分,我有以下文件
- 通用(文件夹)
- 网络
- SamplePage.html
- sample.js
- 网络
【问题讨论】:
标签: javascript c# windows-8.1 win-universal-app