GeckoWebBrowser 想使用jquery 但是目标网页没有加载jquery (Winfrom Gecko动态附加jqueryjs)

news/2024/7/10 23:45:06 标签: jquery, gecko, GeckoWebBrowser
本人测试了3种方法,只有第三种有效(间接append)
注:皆在Gecko_DocumentCompleted 中使用


第一种(无效,直接报document is not defined) 估计是加载问题

try
{
    using (AutoJSContext context = new AutoJSContext(browser.Window.JSContext))
    {
        MessageBox.Show("开始加载");
        var theAppendJQ = @"var aoq_script=document.createElement(""script"");  
                aoq_script.type = ""text/javascript"";
                aoq_script.src = ""https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"";
                document.getElementsByTagName('head')[0].appendChild(aoq_script);  ";
        context.EvaluateScript(theAppendJQ);
        string result;
        context.EvaluateScript(theAppendJQ, out result);
        MessageBox.Show(result);
    }
}
catch (Exception ex)
{
    MessageBox.Show("方式1:"+ ex.Message);
}



第二种(无效,没报错,但是在运行jquery时提示$ is not defined) 就是没加载上jquery

try
{
    GeckoHtmlElement scriptJQ = (GeckoHtmlElement)browser.Document.CreateElement("div");
    scriptJQ.InnerHtml = @"<script> var aoq_script=document.createElement(""script"");  
            aoq_script.type = ""text/javascript"";
            aoq_script.src = ""https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"";
            document.getElementsByTagName('head')[0].appendChild(aoq_script); </script> ";
    var bodyDC = browser.Document.GetElementsByTagName("body")[0];
    bodyDC.AppendChild(scriptJQ); 
}
catch (Exception ex)
{
    MessageBox.Show("方式2:" + ex.Message);
}




第三种(有效) 通过查找资料只能曲线救国,使用SetAttribute设置click,并且通过自动点击来使页面动态引入jquery,后续就可以通过jquery 脚本操作了

try
{
    string jqFun= @"var aoq_script=document.createElement('script');  
            aoq_script.type = 'text/javascript';
            aoq_script.src = 'https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js';
            document.getElementsByTagName('head')[0].appendChild(aoq_script);";
    
    var bodyDC = browser.Document.GetElementsByTagName("body")[0]; 
    bodyDC.SetAttribute("onclick", ""+ jqFun);
    bodyDC.Click();
}
catch (Exception ex)
{
    MessageBox.Show("方式3:" + ex.Message);
}

经过第三种附加jquery后,就可以使用自己的jquery脚本了
var executor = new Gecko.JQuery.JQueryExecutor(browser.Window);
if (!string.IsNullOrEmpty(backJqsrcipt))
{
    executor.ExecuteJQuery(backJqsrcipt);
}


http://www.niftyadmin.cn/n/791078.html

相关文章

Python标准库08 多线程与同步 (threading包)(转载)

Python标准库08 多线程与同步 (threading包) 作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; Python主要通过标准库中的threading包来实现多线程。在当今网络时代&#xff0c;每个服务器都会接收…

源码源码,你不要睡着啦。

都知道源码是好东西&#xff0c;一头扎进去往往容易淹死&#xff0c;楼主扔几个救生圈&#xff0c;剩下的看你们造化了。 问题&#xff1a; 1.为什么默认自定义View经常占满全屏&#xff08;无论是设置wrap_content还是match_parent&#xff09;&#xff1f; 2.为什么说view的…

JCheckBox使用示例

// 初始化 JCheckBox chknew JCheckBox("XXX");// 选择 chk.setSelected(true);// 判断选择状态 chk.isSelected() 转载于:https://www.cnblogs.com/xiandedanteng/p/3704062.html

SwipeRefreshLayout的用法

https://github.com/hanks-zyh/SwipeRefreshLayout

傅立叶变换在图像处理中的作用

傅立叶变换在图像处理中有非常非常的作用。因为不仅傅立叶分析涉及图像处理的很多方面&#xff0c;傅立叶的改进算法&#xff0c; 比如离散余弦变换&#xff0c;gabor与小波在图像处理中也有重要的分量。 印象中&#xff0c;傅立叶变换在图像处理以下几个话题都有重要作用&am…

Linux 进程管理工具 supervisord 安装及使用

Supervisor是用Python实现的一款非常实用的进程管理工具1、安装过程非常简单安装python安装meld3-0.6.8.tar.gz安装supervisor-3.0a12.tar.gz可参照:http://ydt619.blog.51cto.com/316163/10553342、配置supervisor# Web管理界面设定[inet_http_server]port0.0.0.0:9001usernam…

Transparent(透明的Toolbar) AppBarLayout and CollapsingToolbarLayout

由于默认总是跟随系统颜色 这个设置可以让AppBarLayout 都是透明色 <android.support.design.widget.AppBarLayoutandroid:id"id/appbar"android:layout_width"match_parent"android:layout_height"192dp"android:background"android:co…

Linux Ubuntu常用软件

速配指南之软件参考 本文定位&#xff1a;作为速配指南的补充&#xff0c;列出国内用户比较常用的软件。请将论坛软件推荐版块的内容逐步转移至wiki&#xff0c;而非本文。 本文作用&#xff1a;为新手指明软件的方向&#xff0c;也可供已入门的同仁参考。 注意事项&#xff1a…