精华内容
下载资源
问答
  • 最近做Android的Webview开发,使用iframe中嵌入了很多页面,嵌入的页面却不可用,最后发现是 webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view...
  • 主要介绍了Android WebView拦截iframe标签内部跳转教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • webview正常加载iframe标签下的视频

    千次阅读 2017-12-04 10:13:08
    mWebview = (WebView) inflate.findViewById(R.id.wb); WebSettings webSettings = mWebview.getSettings(); // 设置WebView属性,能够执行Javascript脚本 webSettings.setJavaScriptEnabled(true); webSettings....
    mWebview = (WebView) inflate.findViewById(R.id.wb);
    WebSettings webSettings = mWebview.getSettings();
    // 设置WebView属性,能够执行Javascript脚本
    webSettings.setJavaScriptEnabled(true);
    webSettings.setPluginState(WebSettings.PluginState.ON);// 可以使用插件
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
    mWebview.loadDataWithBaseURL(null,mExt.getTutorial(), "text/html",  "utf-8", null);
    展开全文
  • webViewiframe 的兼容性问题

    千次阅读 2017-07-27 14:23:54
    android 下webView打开的网页中有 iframe 时,可能会出现各种问题 可以尝试在 ManiFest.xml 文件的 application 标签上增加 android:hardwareAccelerated="true

    android 下webView打开的网页中有 iframe 时,可能会出现各种问题

    可以尝试在 Manifest.xml 文件的 application 标签上增加 android:hardwareAccelerated="true"

    
    展开全文
  • 项目使用原生WebView访问使用了iFrame的网页出现的问题,列表页使用iFrame跳转到淘宝客的地址,单独访问淘宝客地址是能够打开。但列表页跳转过去总是提示“页面找不到了”,尝试很多方法,最终发现是WebView对第三方...

    问题:
    项目使用原生WebView访问使用了iFrame的网页出现的问题,列表页使用iFrame跳转到淘宝客的地址,单独访问淘宝客地址是能够打开。但列表页跳转过去总是提示“页面找不到了”,尝试很多方法,最终发现是WebView对第三方Cookie支持的问题。
    解决:

    
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true);
    

    完整配置:

          mWebView.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);
                }
    
                @Override
                public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                    handler.proceed();
                    super.onReceivedSslError(view, handler, error);
                }
    
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {    return super.shouldOverrideUrlLoading(view, url);
                }
    
                @TargetApi(Build.VERSION_CODES.LOLLIPOP)
                @Override
                public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
                    return super.shouldInterceptRequest(view, request);
                }
    
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    if (null != title && null != view && TextUtils.isEmpty(mTitle))
                        title.setText(view.getTitle());
                }
            });
            mWebView.setWebChromeClient(new WebChromeClient() {
                                            @Override
                                            public void onProgressChanged(WebView webView, int i) {
                                                super.onProgressChanged(webView, i);
                                            }
    
                                            @Override
                                            public boolean onJsConfirm(WebView view, String url, String message, android.webkit.JsResult result) {
                                                return super.onJsConfirm(view, url, message, result);
                                            }
    
                                            @Override
                                            public void onShowCustomView(View view, CustomViewCallback callback) {
                                                super.onShowCustomView(view, callback);
                                            }
    
                                            @Override
                                            public void onHideCustomView() {
                                            }
    
                                            @Override
                                            public boolean onShowFileChooser(WebView webView, android.webkit.ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
                                                return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
                                            }
    
                                            @Override
                                            public boolean onJsAlert(WebView view, String url, String message, android.webkit.JsResult result) {
                                                return super.onJsAlert(view, url, message, result);
                                            }
    
                                            @Override
                                            public void onReceivedTitle(WebView view, String title) {
                                                super.onReceivedTitle(view, title);
                                            }
                                        }
    
            );
    
     WebSettings mWebSettings = mWebView.getSettings();
    
            mWebSettings.setAllowFileAccess(true);
            mWebSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
            mWebSettings.setSupportZoom(true);
            mWebSettings.setBuiltInZoomControls(true);
            mWebSettings.setUseWideViewPort(true);
            mWebSettings.setSupportMultipleWindows(false);
            mWebSettings.setAppCacheEnabled(true);
            mWebSettings.setDomStorageEnabled(true);
            mWebSettings.setJavaScriptEnabled(true);
            mWebSettings.setGeolocationEnabled(true);
            mWebSettings.setAppCacheMaxSize(Long.MAX_VALUE);
            mWebSettings.setAppCachePath(getDir("appcache", 0).getPath());
            mWebSettings.setDatabasePath(getDir("databases", 0).getPath());
            mWebSettings.setGeolocationDatabasePath(getDir("geolocation", 0)
                    .getPath());
            mWebSettings.setPluginState(WebSettings.PluginState.ON_DEMAND);
            mWebSettings.setLoadWithOverviewMode(true);
            mWebSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
            String mUserAgent = mWebSettings.getUserAgentString();
            mWebSettings.setUserAgentString(mUserAgent + " App/AppName");
            syncCookie();
            mWebSettings.setUseWideViewPort(true);
            mWebSettings.setLoadWithOverviewMode(true);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                mWebSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
            } else {
                mWebSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                mWebSettings.setDisplayZoomControls(false);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                mWebSettings.setLoadsImagesAutomatically(true);
            } else {
                mWebSettings.setLoadsImagesAutomatically(false);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                mWebSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
            }
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true);
    
            mWebView.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);
            mWebView.setHorizontalScrollBarEnabled(false);
            mWebView.setHorizontalFadingEdgeEnabled(false);
            mWebView.setVerticalFadingEdgeEnabled(false);
    
            mWebView.requestFocus();
        private void syncCookie() {
            CookieSyncManager.createInstance(this);
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);
            CookieSyncManager.getInstance().sync();
        }
    
    展开全文
  • Android WebView拦截iframe标签内部跳转

    千次阅读 2019-07-18 14:38:29
    最近项目里有个广告位需要动态配置,后台给了一段 html嵌套iframe标签的代码,需要Android拦截iframe内部的跳转,自己做处理。 比如,下面是一段html代码,嵌套这iframe标签,src就是跳转地址,我现在就要当你点击...

    最近项目里有个广告位需要动态配置,后台给了一段 html 嵌套iframe标签的代码,需要Android拦截iframe内部的跳转,自己做处理。

    比如,下面是一段html代码,嵌套这iframe标签,src就是跳转地址,我现在就要当你点击该网址的时候做拦截,自己做处理而不是跳转。

    <html> 
    <iframe src="https://www.imooc.com/" frameborder='0' scrolling='no' width='100%' height='300'>
    </iframe>
    </html>

    oh,我还是第一次知道iframe标签,不过想着应该和普通拦截h5差不多,兴致勃勃的就开始撸代码了,但是无论怎么配置WebView,还是重写 shouldOverrideUrlLoading ,就是拦截不了iframe里的网址。。。后来研(bai)究(du)了很久,终于拦截到了。

    实现方法:

      首先,你的WebView要 setWebViewClient ,重写

    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {} 方法,然后setWebChromeClient,重写onCreateWindow方法,在里面创建新的WevView,加入到webView里,给新的webView  setWebViewClient,再重写shouldVeerrideUrlLoading方法,在这里拦截。
            webView.setWebChromeClient(new WebChromeClient(){
                
                @Override
                public boolean onCreateWindow(WebView webView, boolean isDialog, boolean isUserGesture, Message resultMsg) {
                    WebView newWebView = new WebView(getActivity());
                    webView.addView(newWebView);
    
                    WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                    transport.setWebView(newWebView);
                    resultMsg.sendToTarget();
    
                    newWebView.setWebViewClient(new WebViewClient(){
    
                        @Override
                        public boolean shouldOverrideUrlLoading(WebView webView, String url) {
                            //TODO 在这里实现你的拦截方法
                            if (url.contains("https://www.imooc.com")){
                                toast("拦截到了" + url);
                                Intent intent = new Intent(getActivity(), CommonWebViewActivity.class);
                                intent.putExtra("url",url);
                                startActivity(intent);
    
                            }else {
                                webView.loadUrl(url);
                            }
                            return true;
                        }
                    });
    
                    return true;
                }
            });

     

    完整的代码如下:

    private void initWebView(WebView webView) {
            //启用支持javascript
            WebSettings settings = webView.getSettings();
            settings.setJavaScriptEnabled(true);
            settings.setJavaScriptCanOpenWindowsAutomatically(true);
            settings.setSupportZoom(false); //支持缩放
            settings.setBuiltInZoomControls(false); //支持手势缩放
            settings.setDisplayZoomControls(false); //是否显示缩放按钮
            settings.setDefaultTextEncodingName("utf-8"); //设置文本编码
            settings.setUseWideViewPort(false); //将图片调整到适合WebView的大小
            settings.setLoadWithOverviewMode(true); //自适应屏幕
            settings.setDomStorageEnabled(true);
            settings.setSaveFormData(true);
            settings.setSupportMultipleWindows(true);
            settings.setAppCacheEnabled(true);
            settings.setPluginState(WebSettings.PluginState.ON);//支持插件
            settings.setCacheMode(WebSettings.LOAD_NO_CACHE); //不适用缓存
            settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//支持内容重新布局
            webView.setOverScrollMode(View.OVER_SCROLL_NEVER); // 取消WebView中滚动或拖动到顶部、底部时的阴影
            webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); // 取消滚动条白边效果
            // >= 19(SDK4.4)启动硬件加速,否则启动软件加速
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
                settings.setLoadsImagesAutomatically(true); //支持自动加载图片
            } else {
                webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
                settings.setLoadsImagesAutomatically(false);
            }
    
            webView.setWebViewClient(new WebViewClient() {
                @Override
                public void onLoadResource(WebView view, String url) {
                    super.onLoadResource(view, url);
                    Log.w("webView==onLoadResource===url=" + url);
                }
    
                @Override
                public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
                    sslErrorHandler.proceed();  // 接受所有网站的证书
                }
    
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                  
                    if (request.getUrl().toString().contains("http://www.baidu.com")){
                        toast("拦截到了baidu");
                        
                    }else {
                        webView.loadUrl(request.getUrl().toString());
                    }
    
                    return true;
                }
            });
    
            webView.setWebChromeClient(new WebChromeClient(){
             
                @Override
                public boolean onCreateWindow(WebView webView, boolean isDialog, boolean isUserGesture, Message resultMsg) {
                    WebView newWebView = new WebView(getActivity());
                    webView.addView(newWebView);
    
                    WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                    transport.setWebView(newWebView);
                    resultMsg.sendToTarget();
    
                    newWebView.setWebViewClient(new WebViewClient(){
    
                        @Override
                        public boolean shouldOverrideUrlLoading(WebView webView, String url) {
                            
                            if (url.contains("http://www.imooc.com")){
                                toast("拦截到了" + url);
                                Intent intent = new Intent(getActivity(), CommonWebViewActivity.class);
                                intent.putExtra("url",url);
                                startActivity(intent);
    
                            }else {
                                webView.loadUrl(url);
                            }
                            return true;
                        }
                    });
    
                    return true;
                }
            });
        }

     

    参考文章:https://blog.csdn.net/qq498654921com/article/details/44815281

    展开全文
  • Webview 封装组件 <template> <view> <web-view :src="src"></web-view> </view> </template> <script> export default { props: { src: { type:String,...
  • WebView性能、体验分析与优化

    万次阅读 2017-06-17 13:10:27
    在App开发中,内嵌WebView始终占有着一席之地。它能以较低的成本实现Android、iOS和Web的复用,也可以冠冕堂皇的突破苹果对热更新的封锁。然而便利性的同时,WebView的性能体验却备受质疑,导致很多客户端中需要动态...
  • electron 项目,webview页面 的 子iframe页面 加载 preload.js 解决方案: 在主线程 main.js 中 需要打开权限 nodeIntegrationInSubFrames: true 在页面标签中也需要打开权限 nodeintegrationinsubframes main.js ...
  • iframe & WebView React Native 怎么渲染 iframe 页面 WebView & source html https://facebook.github.io/react-native/docs/webview#source https://facebook.github.io/react-native...
  • Android webview加载iframe标签的HTML

    万次阅读 2017-09-01 14:07:17
    我最近项目需求加入文档云 根据后台返回的数据直接返回iframe标签,但是Android这边想用webview加载,中间出现过各种问题还好最终解决了。所以就整理出一下的代码自己做个笔记同时也希望对您有帮助! 直接上关键性...
  • IOS webview 引入iframe无显示

    千次阅读 2017-03-15 18:08:21
    在IOS web view 引入iframe,在真机上页面空白,加载不了外部页面。<iframe src="http://www.baidu.com"></iframe>需要在config.xml中添加如下两段代码来允许访问外部链接:*" /> *" />
  • 从 _fetchQueue 的源码中,发现在将 message 传递后就立马清空了,实际上这并不准确,因为连续N次改变 iframe 的 src ,shouldOverrideUrlLoading 的实际调用次数为 M(M),且将以后一次调用时的参数为准。...
  • WebView&gt;(R.id.web_wd) //获取 webview对象 var web_set = web_wd.settings //获取webviewset对象 web_set.javaScriptEnabled=true //设置允许JS,会提示xss危险 web_wd.webViewClient=object:...
  • 2.iframe才是加载的内容也,但WebView的所有方法不响应事件了。很多网友说了其他方法,自己调试了,都不管用。   自己写的方法,循环获取,直到不是地址。当然遗留的bug需要你们在实际应用中,根据自己的业务,...
  • webview内的iframe中的事件不可用

    千次阅读 2017-10-16 15:46:06
    最近做Android的Webview开发,使用iframe中嵌入了很多页面,嵌入的页面却不可用,最后发现是
  • Android WebView 获取html iframe内部链接

    千次阅读 2017-03-30 16:56:43
    Android 中当我们在使用WebView加载html页面时,html中可能会嵌套iframe,这时候iframe里面的请求Android通过 shouldOverrideUrlLoading是无法拦截的,需要shouldInterceptRequest才可以拦截到。但是...
  • iframe外层div添加样式属性 -webkit-overflow-scrolling:touch; overflow:auto;
  • IOS iframe 的高度会根据内容自适应

    千次阅读 2018-08-10 11:50:32
    问题:在iOS上一个页面通过iframe嵌套一个页面,内容页面中一个显示在页面底部的元素显示不出来,这个元素的 position 为 fixed 。 原因:因为 iOS 下的 Safari 的 IFrame 的高度会根据页面的内容自适应造成了 ...
  • 在 cordova 项目里的 config.xml里加上 &lt;access origin="*" /&gt; &lt;allow-navigation href="*" /&gt; &lt;allow-intent href="*"... 
  • WebView之与 JavaScript 交互Js 注入漏洞,,JSBridge 1.与 JavaScript 交互 (1)使用系统方法 addJavascriptInterface 注入 java 对象来实现。 (2)利用 WebViewClient 中 shouldOverrideUrlLoading (WebView ...
  • 主要介绍了Android实现WebView点击拦截跳转原生,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 我用webview去加载网页 用shouldOverrideUrlLoading()获取页面的请求 可是页面中包含<iframe> 里面有个链接是<a href="http://xxx.com" target="_blank">iframe中的超链接</a> 点击时 shouldOverrideUrlLoading...
  • 转自:...  /////////////////////////////初始化,self.view是父控件/////////////////////////////////  _webView = [[UIWebView alloc] initWithFrame: CGRect
  • 同一个html页面,在安卓和pc都是没有异常的,到了ios就只显示一半,下面的那一半被腰斩了... 解决方法(并没有完美解决,上下滑动依旧存在bug,有更优解欢迎评论) 第一步,在css样式中加上 &lt;style&...gt...
  • 用PC端的浏览器打开主页,iframe可以获取到父窗体中的JS变量,但是用android的WebView打开这个Html页面,却始终无法获取到 尝试了很多种方式都不行,既然PC端浏览器能成功,我想是不是WebView本身的问题 所以在此...
  • 主要介绍了解决Android WebView拦截url,视频播放加载失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,387
精华内容 1,354
关键字:

iframewebview