JavaScript 未在 .NET WebBrowser 控件中执行

Posted

技术标签:

【中文标题】JavaScript 未在 .NET WebBrowser 控件中执行【英文标题】:JavaScript not executing in .NET WebBrowser control 【发布时间】:2013-01-18 01:32:54 【问题描述】:

我的两个朋友测试了我一直在从事的一个项目,该项目依赖于 WebBrowser 控件的使用,并且设法遇到了 WebBrowser 控件无法在包含的 Web 上执行任何 javascript 的恒定场景页面。

为了缩小范围,我创建了一个仅包含 WebBrowser 控件的新 Windows 窗体项目,并尝试导航到以下页面:http://javatester.org/javascript.html

我朋友电脑上的结果如下(点击放大):

如您所见,尝试调用 JS 特定代码时它不会呈现任何内容,或者如果您在禁用或启用 JS 的 Web 浏览器中查看它,您会看到一些东西。

他导出了包含启用 JavaScript 设置的注册表项(请参阅https://gist.github.com/4699943),每个键中的 1400 值与我使用的相同设置匹配,当我运行程序时我没有问题。

整个测试项目的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        

        private void Form1_Shown(object sender, EventArgs e)
        
            this.webBrowser1.Navigate("http://javatester.org/javascript.html");
        
    

如果使用此代码创建一个新项目,该代码针对 4.5 框架(在我的机器上或他的机器上)它可以工作,但是如果使用 4.0 或更低版本创建一个,则会出现上述结果。我不确定这是巧合还是确实与问题/解决方案有关。

需要注意的是,如果他在 Internet Explorer 中导航到此页面没有问题,它会检测到 JavaScript 已启用,此问题仅存在于此测试应用程序及其所属的主项目中。

任何帮助都将不胜感激,我花了整整两个月的时间试图解决这个问题,但仍然无法解决。

【问题讨论】:

我不认为框架版本应该是一个问题。我在 3.5 中完成了 JavaScript 可以正常工作的项目。我确实知道,由于我在使用标准 WebBrowser 控件时遇到的其他问题,我已经将很多项目转移到使用 WebKit.net(WebKit 是 Chrome 和 Safari 的布局引擎)。这是一个很棒的工具,他们真的试图让它类似于标准控件。如果我是你,我至少会检查一下。 WebKit.net @LeonNewswanger - 这有点偏离主题,但是:我之前曾考虑过切换到 WebKit,但是该项目的一些未来要求是我们可以使用 JavaScript 从 JavaScript 回调到程序集ObjectForScripting 属性,我从来没有在 WebKit 中找到这样的东西;你在 WebKit 中遇到过这种情况吗? 老实说,我从来没有看过,对不起。我意识到这并不是你问题的真正答案。这就是我将其作为评论发布的原因,并且由于我不知道您的其他要求,我认为这可能可以帮助您解决问题。 在过去,WebKit 还发生了其他一些事情,但我不得不深入研究互操作本身才能找到,因为 WebKit.net 包的很大一部分基本上只是包装类。 元标签解决方案可能很有趣。 IE7默认***.com/questions/4612255/… 【参考方案1】:

从我的测试中,带有 .NET 4 的 WebBrowser 报告了一个 IE 7.0 的 Web 浏览器代理字符串。因此,请先检查您的 JavaScript 在 IE7 中是否正常工作。

【讨论】:

【参考方案2】:

如果您使用 webbrowser control.Document Text 属性,则不会加载脚本。使用 Navigate 方法非常好。当我从第三方获取 html 时,我需要文档文本属性才能工作。如果我从中创建一个 html 文件并在常规 IE 浏览器中打开它,则相同的 html 内容可以正常工作。网络浏览器控件有问题。

【讨论】:

您能否详细说明此答案,或提供更多解释或文档?

以上是关于JavaScript 未在 .NET WebBrowser 控件中执行的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET DropDown SelectedIndexChanged 未在 Firefox 中使用 UpdatePanel 触发

javascript - 使用另一个函数中的变量 javascript - '今天未在对象中定义'

JavaScript 未在 XAMPP 本地主机上加载

ReferenceError StringBuilder 未在 javascript 中定义

javascript 未在浏览器中执行

嵌入在 html 中的 javascript 未在 wkwebview 中运行