通过 UWP 和 Visual Studio 运行应用程序时出现 InvalidCharacterError

Posted

技术标签:

【中文标题】通过 UWP 和 Visual Studio 运行应用程序时出现 InvalidCharacterError【英文标题】:Getting an InvalidCharacterError when running app through UWP and Visual Studio 【发布时间】:2019-10-15 09:32:57 【问题描述】:

这段代码是通过BuckleScript -> JS生成的,我看不到无效字符在哪里。

但是,我认为这可能是 UWP 不允许将内部主机作为一项功能访问的问题,因此会引发错误。

我已经添加了一个环回异常,添加了 SID 和那个。我已经运行 CheckNetIsolation LoopbackExempt -is -n=packageFamilyName。

function getJidFromUrl(url) 
  var match = url[
  /* path */
  0];

  if (match && !match[1]) 
    var jidString = atob(match[0]); //error line here
    return toJid(jidString);
  

index.bs.js 中第 * 行第 5 列未处理的异常

0x800a139e - javascript 运行时错误:InvalidCharacterError

【问题讨论】:

你是在 UWP 的 WebView 还是 Winjs 中运行这段代码?您的参数url 是字符串,您捕获第一个字符名称match,现在您的match 是一个字符。 atob 函数无法运行,因为此字符未编码。您可以尝试在浏览器中运行此代码以查看发生了什么。 我都没有运行,只是一个空白的 JS 通用 Windows 应用程序 所以,这个问题是一个纯 JavaScript 问题,它不是 UWP 特有的。其实我已经解释了原因。 Your parameter url is string, you catch the first character names match, now your match is a char. atob function can't run because this char not encode. 我得到的第一个匹配[0],是“index.html”不是一个有效的 URI,我不确定这是从哪里来的,可能是你输入的起始页,或内容 URI。 我不明白为什么match[0] 是'index.html',它应该是一个字符。请提供minimal reproducible example 以获取更多诊断信息。 【参考方案1】:

也许你打算写

atob(match);

而不是

atob(match[0]);

考虑到你在做

var match = url[0];

【讨论】:

我认为您正在向 atob 发送它不支持的内容。 url到底是什么,你为什么要url[0] url是一个标准的url字符串,如blahblah.com/userjid,原函数接受url,使用reasonreact.router将url分解为path、search、hash,然后使用atob()得到jidstring。这是 ReasonReact 中的原始函数let getJidFromUrl = url => open ReasonReactRouter; switch(url.path) | [x] => let jidString = atob(x); XMPP.Jid.toJid(Some(jidString)); | _ => None ; ; 老实说,我不知道 buckleScript 编译器在做什么。

以上是关于通过 UWP 和 Visual Studio 运行应用程序时出现 InvalidCharacterError的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 .UWP 模拟器无法在 Visual Studio 中启动?

无法在 Visual Studio 中为 UWP 应用设置“用户通知侦听器”功能

如何利用visual studio2015编写uwp应用

带有 UWP 的 EF Core - Visual Studio 19

如何在 Visual Studio 2017 中执行 Xamarin.uwp

如何在 Visual Studio 2019 中使用 Xamarin Forms(UWP) 和 C# 创建 Web 应用程序