【CEF】CEF跨域,CEF跨域调用IFrame中的元素即在IFrame(跨域)中执行JS脚本

目的:在CEF中允许JS跨域访问,即使用JS代码调用主页面的IFrame中的元素

解决方案:

1.在构造函数初始化方法中加入BrowserSettings的设置

BrowserSettings.WebSecurity = CefState.Enabled;

此方案方便快捷,简单又易用,如果没什么特殊情况,这样做就很好

2.将JS由主页面注入到对应的IFrame中,再由js去处理IFrame的元素

        /// <summary>
        /// 插入jsscript到iframe中
        /// </summary>
        /// <param name="script">脚本内容</param>
        /// <param name="name">iframe的name值</param>
        /// <param name="urlKeyWord">iframe的url特有的值</param>
        /// <returns></returns>
        public async Task ScriptInFrame(string script,string name ="",string urlKeyWord = "")
        {
            //this为cefBrowser
            if (!string.IsNullOrEmpty(name))
            {
                //直接通过名称来查找
                this.GetBrowser().GetFrame(name)?.ExecuteJavaScriptAsync(script);
            }
            else
            {
                //通过Iframe上的url来查找
                var frameList = this.GetBrowser().GetFrameIdentifiers();
                //frameList[index]      此方法不太靠谱,有时候页面的iframe不确定的情况下,就会出现一些不必要的差错
                if (frameList.Count <= 0) throw new Exception("未找到登录页面");
                IFrame iframe = null;
                foreach (var item in frameList)
                {
                    var iframeTemp = this.GetBrowser().GetFrame(item);
                    if(iframeTemp.Url?.Contains(urlKeyWord) == true)
                    {
                        iframe = iframeTemp;
                        break;
                    }
                }
                if(iframe != null) iframe.ExecuteJavaScriptAsync(script);
            }
            await Task.Delay(1000);
        }

如果不想设置BrowserSettings.WebSecurity为允许,可以使用此方式,平时开发中,也建议使用此方式

我遇到的问题就是开了跨域会出现意想不到的错误,所以不得不把跨域关掉

完,编辑于2019-08-21

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页