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