我有一个博客的JSON内容,正在使用loadDataWithBaseURL中的WebView显示。该博客的许多文章都嵌入了youtube / vimeo视频。

当前,所有视频都在webview本身中播放。

我要实现的是,当用户单击播放视频时,他应该获得弹出窗口“使用浏览器或YouTube应用完成操作”。简而言之,我不希望视频在应用程序的webview中播放。

我发现了每个人都在尝试避免此弹出窗口的问题。.不知道为什么我没有得到它。

这是我的代码

public class DetailFragment extends Fragment {

    String strTitle = null;
    String strURL = null;
    String strContent = null;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {

        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
        AdView mAdView = (AdView) getView().findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.detail_fragment, container, false);

        strTitle = getArguments().getString("title");
        strURL = getArguments().getString("url");
        strContent = getArguments().getString("content");

        String contToDisplay = "<html><head><meta http-equiv='Content-Type' content='text/html' charset='UTF-8' /></head><body><style type='text/css'> img{width:80%;} .wp-image-42223{display:none;}</style>" + strContent+"</body></html>";

        TextView title = (TextView) view.findViewById(R.id.title);
        WebView desc = (WebView) view.findViewById(R.id.desc);


        WebSettings ws = desc.getSettings();
        ws.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        ws.setJavaScriptEnabled(true);
        ws.setLoadWithOverviewMode(true);
        ws.setUseWideViewPort(true);
        ws.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

        ws.setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17");
        title.setText(strTitle);
        // desc.loadData(contToDisplay, "text/html; charset=UTF-8", null);
        desc.loadDataWithBaseURL("about:blank",strContent,"text/html", "UTF-8", null);

        return view;
    }
}


任何将视频加载到浏览器或YouTube应用中的解决方案都将有所帮助。

注意

我在Web视图中显示的内容是HTML格式,其中iframe是元素之一。这是示例数据:

"<p>Some text</p>
 <p><iframe src=\"https://www.youtube.com/embed/q7uBAtaK15I\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"></iframe>   </p>
<p>some more text</p>


整个内容显示在webview中。我要实现的是,当某人单击iframe时,应提示他complete action using,即不允许该人在webview中播放视频

最佳答案

我设法使用正则表达式实现了这一点。

这是我所做的

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.detail_fragment, container, false);

    strTitle = getArguments().getString("title");
    strURL = getArguments().getString("url");
    strContent = getArguments().getString("content");

    contToDisplay = "<html><head><meta http-equiv='Content-Type' content='text/html' charset='UTF-8' /><script type='text/javascript'></script></head><body><style type='text/css'> img{width:80%;} .wp-image-42223{display:none;} </style>" + strContent+"</body></html>";

    TextView title = (TextView) view.findViewById(R.id.title);
    TextView date = (TextView) view.findViewById(R.id.date);
    TextView authorName = (TextView) view.findViewById(R.id.auth);
   desc = (WebView) view.findViewById(R.id.desc);


    setHasOptionsMenu(true);

    WebSettings ws = desc.getSettings();
      ws.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    ws.setJavaScriptEnabled(true);
    ws.setLoadWithOverviewMode(true);
    ws.setUseWideViewPort(true);
    ws.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
    ws.setSupportMultipleWindows(true);

    ws.setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17");
    title.setText(strTitle);

    final String s = strContent;
    final String regex = "(?<=<iframe src=\")[^\"]*";
    final String regex2 = "<\\s*iframe[^>]*><\\s*/\\s*iframe>";
    p = Pattern.compile(regex);
    final Pattern p2 = Pattern.compile(regex2);
    m = p.matcher(s);
     m2 = p2.matcher(s);
    evaluate(s,contToDisplay,this);
    desc.loadData(value, "text/html; charset=UTF-8", null);
    return view;
   }

     String evaluate(String token,String defaultValue, DetailFragment context){
     value=null;
    Matcher matcher=p.matcher(token);
    if (matcher.find()) {
        iframeURL=matcher.group();
        String newURL = "<a href=\"" + iframeURL + "\">Watch the Video Here</a>";
        value = m2.replaceAll(newURL);
    }
    if (value == null) {
        value=defaultValue;
    }
    return value != null ? value : "";
}


可能会帮助遇到类似问题的人。

08-06 03:24