我使用的是网页视图,显示了一定的HTML文件,但是,当我打电话InvokeScriptAsync,我把遇到的错误。 “未知的名称(从HRESULT异常:0x80020006(DISP_E_UNKNOWNNAME))。”出现这种情况eventhough脚本被称为NavigationComplete或DOMContentLoaded。
我准备了一个简单的应用程序来调试这个问题,我注意到,当脚本是一个单独的.js文件时,会出现错误。但是,如果它被放置在HTML文件中,不会发生错误。
我希望能在一个单独的文件中的脚本,因为我有相当多的功能来实现,我会使用一些第三方脚本,所以它不会有维护的HTML文件中的所有脚本。
顺便说一句,我也尝试在非通用的应用程序相同的代码,只是使用了Windows 8.1商店应用,它会即使储存在一个单独的文件中的脚本正常工作。这就是为什么必须有一些设置我失踪,使这项工作在一个通用的应用程序。
这是我的代码的MainPage:
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>
这里是我的项目的设置:我有我的项目设置为一个通用的应用程序。在普遍的应用程序的共享代码的一部分,我有以下文件
我找到了解决这个问题浪费我整天就可以了。它是通过在* .Shared.projitem JavaScript文件标注不正确造成的。
JavaScript文件被标记为在的ItemGroup NONE这似乎导致其无法被发现。为了使该项目可见,将其更改为内容。
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)Common\Web\sample.js" />
</ItemGroup>