Javascript 无法使ExecuteScriptAsync()按预期工作

Javascript 无法使ExecuteScriptAsync()按预期工作,javascript,html,cefsharp,Javascript,Html,Cefsharp,我正在尝试使用ExecuteScriptAsync将HTML输入设置为只读。我可以让它工作,但这不是一个理想的场景,所以我想知道是否有人知道为什么它不能按我预期的方式工作。 我用的是Cef3,63版 我试着看看这是否是一个时间问题,似乎不是。 我试图使浏览器的视图无效,但似乎没有帮助 我目前拥有的代码有效: public void SetReadOnly() { var script = @" (function(){ var labelTags = do

我正在尝试使用ExecuteScriptAsync将HTML输入设置为只读。我可以让它工作,但这不是一个理想的场景,所以我想知道是否有人知道为什么它不能按我预期的方式工作。 我用的是Cef3,63版

我试着看看这是否是一个时间问题,似乎不是。 我试图使浏览器的视图无效,但似乎没有帮助

我目前拥有的代码有效:

public void SetReadOnly()
{
    var script = @"
        (function(){
        var labelTags = document.getElementsByTagName('label');
        var searchingText = 'Notification Initiator';
        var found;
        for (var i=0; i<labelTags.length; i++)
        {
            if(labelTags[i].textContent == searchingText)
            {
                found = labelTags[i]
                break;
            }
        }
        if(found)
        {
            found.innerHTML='Notification Initiator (Automatic)';
            var input;
            input = found.nextElementSibling;
            if(input)
            {
                input.setAttribute('readonly', 'readonly');
            }

        }})()
        ";
        _viewer.Browser.ExecuteScriptAsync(script);
        _viewer.Browser.ExecuteScriptAsync(script);
}
输入不再显示为只读。加载网页的HTML源代码确实将其显示为只读,但该属性设置后,框架似乎不会重新呈现

另一个问题是我执行了两次脚本。如果我只运行一次,就不会得到想要的结果。我认为这可能是脚本运行所需的V8上下文的问题。显然,运行脚本将创建上下文,因此这可能是运行两次脚本有效的原因

几个小时来我一直在试图弄明白这一点,但没有找到任何东西可以解释这种奇怪的行为。有人有线索吗


谢谢

请确认您已经阅读了两个execute调用,它们都在主框架上执行,如果您不相信,请查看源代码。不需要在UI线程上执行。在全局上下文中执行脚本时,应该将脚本包装在匿名闭包中。您可以使用Devtools进行调试。谢谢您的评论,我已经删除了UI线程调用,并按照您的建议包装了脚本。我现在也阅读了文档,对我来说,我的问题似乎是V8上下文。问题是,我需要在网站上运行其他脚本后运行我的JS,我认为这不会创建上下文。我已尝试添加RenderProcessMessageHandler并在ContextCreated上运行脚本,但没有成功。@amaitland您认为两个执行调用都执行完全相同的操作是正确的,这也在您链接的文档中。我认为正在发生的是,我在第一次调用“可以使用IFrame.ExecuteJavaScriptAsync创建V8Context”时创建了V8上下文。我会调试,但我不能花更多的时间在这方面,因为它已经“工作”。。。谢谢你的帮助!
found.innerHTML='Notification Initiator (Automatic)';