【问题标题】:InvokeScript throws exception the second time through (works first time)InvokeScript 第二次通过(第一次工作)抛出异常
【发布时间】:2014-02-06 06:03:54
【问题描述】:

我被分配了解决 Windows Phone C# 问题的任务,但不幸的是我从未做过任何 Web 开发或电话开发,所以我遇到了一些麻烦。经过几个小时的努力,我放弃了,来到这里问......希望这个问题不要太模糊,因为我担心它可能......

这个移动应用正在做一些屏幕抓取,其中包含以下代码:

wb.InvokeScript ("eval", "document.getElementById('ctl00_ContentPlaceHolder1_textboxFirstName').value = '" + firstName + "';");

第一次运行完美,但第二次运行时崩溃。错误信息是这样的:

Microsoft.Phone.Interop.ni.dll 中出现“System.SystemException”类型的异常,但未在用户代码中处理 附加信息:发生未知错误。错误:80020101。

我在遵循此代码时遇到了问题(我知道我很困惑)。有谁知道为什么这条线会第二次崩溃?语法似乎是正确的。如果我注释掉这一行,程序会在下一个 InvokeScript 行崩溃。也许您不能两次调用同一行?

任何想法都将不胜感激。

谢谢。

【问题讨论】:

  • 只是一个想法 - 尝试使用转义的双引号而不是单引号。我认为 InvokeScript 可能会生成类似 eval('...') 的东西,在这种情况下你的单引号会爆炸。
  • 感谢您的回复,bhamlin,但不行。我试过了,但第二次仍然会爆炸。第一次仍然可以正常工作。

标签: c# windows-phone-8 invokescript


【解决方案1】:

我知道这是一个老问题,但我遇到了类似的问题[1],希望我的发现可能对其他人有所帮助。

正如一些背景知识,我试图访问加载到 webview 控件 (WebView.NavigateToString("html")) 的 HTML 页面中的锚链接。可以通过文本块选择锚点(显然在 webview 之外)。经过一番调查,我得出的结论是 webview 控件不喜欢我用来导航到锚点的 javascript。

我最初尝试使用 javascript 函数很简单,但效果不佳:

function scrollToAnchor(id) { window.location.hash = id; } 

这将在第一次工作,但在我再次加载 HTML 页面之前永远不会再次工作。


我最终使用了下面的代码,很简单,但是花了很长时间才找到可以始终如一地工作的东西(也许更高级的 pureJS 人会从第一步就知道这一点)...

function scrollToAnchor(id) { location.href = id; }

因此,总而言之,这些错误通常可以归因于不良/不受支持的 JS 代码。或许可以先试试 IE 中的代码,如果在那里可以工作,它应该可以在 Windows Phone 的 webview 控件中工作。

我的 javascript 在我第一次运行 invokescript 时可以工作,但任何后续尝试总是因“80020101”异常而失败。 [1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    相关资源
    最近更新 更多