我想抢先获取要加载的网页的HTML代码,webView使用正则表达式解析它,并只显示我想要的HTML代码,同时让网页仍然认为它已经加载了所有内容.
有没有办法在WebViewClient.onLoadResource()相似的方法中做到这一点?
编辑:我试过这个:
class MyJavaScriptInterface
{
@SuppressWarnings("unused")
public void showHTML(String html, Context context)
{
new AlertDialog.Builder(context)
.setTitle("HTML")
.setMessage(html)
.setPositiveButton(android.R.string.ok, null)
.setCancelable(false)
.create();
pageHTML = html;
}
}
@Override
public void customizeWebView(final ServiceCommunicableActivity activity, final WebView webview, final SearchResult mRom) {
mRom.setFileSize(getFileSize(mRom.getURLSuffix()));
webview.getSettings().setJavaScriptEnabled(true);
MyJavaScriptInterface interfaceA = new MyJavaScriptInterface();
webview.addJavascriptInterface(interfaceA, "HTMLOUT");
WebViewClient anchorWebViewClient = new WebViewClient()
{
@Override
public void onPageFinished(WebView view, String url)
{
/* This call inject JavaScript into the page which just finished loading. */ …Run Code Online (Sandbox Code Playgroud) 我已经研究了2天,我在互联网上的任何地方都没有发现类似的问题!
在主要活动中,我正在尝试打开一个包含webview的新活动,该活动将在android_asset文件夹中显示一个html页面(about.html).
我能够在正确显示webview的情况下启动新活动(test.java),但网页内容却没有显示出来.甚至显示webview的垂直滚动条(因为页面内容相对较长),我可以上下滚动页面但没有内容!
package com.example.test;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
public class test extends Activity {
private TextView apppagetitle;
private WebView browser_rn;
@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.test);
browser_rn=(WebView)findViewById(R.id.webkit);
browser_rn.getSettings().setJavaScriptEnabled(true);
browser_rn.getSettings().setPluginsEnabled(true);
browser_rn.setScrollBarStyle(0);
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
apppagetitle=(TextView)findViewById(R.id.apppagetitle);
browser_rn.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return …Run Code Online (Sandbox Code Playgroud) 我正在开发一个基于webView的Android应用程序,并试图捕获触摸事件.但是它不起作用,我在日志中看到了这条消息:
"我们正在等待WebCore的触摸响应"
有谁知道如何解决这个问题?
从这个问题可以理解问题的详细解释,因为用户添加了图像以更好地解释它.
我在WebView中加载Html内容.我的布局有很多视图,WebView位于ScrollView中(根据布局要求).请不要回答 - "Don't put WebView inside ScrollView".我知道将WebView放入ScrollView并不是一件好事,但根据要求我需要这样做.
所以,我有左片段(显示列表项)和右片段(显示从左片段中选择列表项反映的数据).现在,首先当我在WebV中加载Html内容时,它显示正确.之后,当我使用新的Html内容刷新WebView时,会出现问题.
假设,我的第一个Html内容是正确显示的100行,然后我用新的Html内容重新加载WebView,这是40行然后WebView没有缩小并适合40行的内容,它仍然长达100在底部显示白色/空白区域的线条.
因此,似乎WebView能够从较少的内容重新调整自身大小,这些内容先前已加载到更多内容,但在内容少于先前加载的内容时无法重新调整大小.
我尝试了很多方法,
android:hardwareAccelerated="true"清单mWebView.clearView();哪个导致重新调整WebView的大小,但有时WebView开始闪烁,这只是令人讨厌.与此视频类似但是,找不到任何合适的解决方案.如果你们中的任何人遇到同样的问题,请让我知道我可以申请的最佳解决方案.
更新 -
经过进一步的谷歌搜索,似乎这是Honeycomb中一个众所周知的问题.这个问题也表明了类似的问题.
我的网页视图加载了一个网址 - 在完成加载后 - 更改为另一个网址.我怎样才能抓住新的网址.getURL()总是返回第一个网址而不是第二个网址.如果我使用浏览器,我可以看到新的URL但是我无法从webview获得.
我的Android应用程序中有一个WebView,它使用loadDataWithBaseURL()方法加载HTML字符串.问题是本地锚链接(<a href="#link">...)无法正常工作.单击链接时,它将突出显示,但不会滚动到相应的锚点.
如果我使用WebView的loadUrl()方法加载包含锚链接的页面,这也不起作用.但是,如果我在浏览器中加载相同的URL,则锚链接可以正常工作.
是否需要特殊处理才能使这些工作适用于WebView?
我正在使用API v4(1.6).
代码并不多,这里是我一直在使用的一些测试代码的相关部分:
WebView detailBody = (WebView) findViewById(R.id.article_detail_body);
String s = "<a href=\"#link\">LINK!</a><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><a name=\"link\"></a>Testing!";
detailBody.loadDataWithBaseURL(API.HomeURL(this), s, "text/html", "utf-8", "");
Run Code Online (Sandbox Code Playgroud) 我正在研究在cordova上开发的移动应用程序.我想实现一个后台服务,它做一些工作,比如打开套接字连接同步本地数据库和远程服务器,并通知用户新的远程推送等.关键是我在javascript中实现了这个代码,但我想在后台执行它.
我在互联网上搜索了一个cordova后台服务插件.
我认为最好的是红色文件夹,但它只适用于Android,它不允许我编写javascript以在后台执行.但只是在java和javascript之间交换json.
我已经阅读了一些关于android中后台服务的主题,这些是我发现的有用的:
所以我开始编写cordova插件(主要是在android上)来在后台执行javascript代码.我从后台服务创建了一个webview来执行它的javascript.这在我执行普通的javascript时工作正常但是当涉及到cordova插件时,它失败了,例如设备device.uuid给出的null.
这是java服务代码:
public void onStart(Intent intent, int startId) {
Toast.makeText(this, "My Happy Service Started", Toast.LENGTH_LONG).show();
createBackGroundView();
super.onStart(intent,startId);
}
public void createBackGroundView(){
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutParams params = new WindowManager.LayoutParams(
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 0;
params.width = 200;
params.height = 200;
LinearLayout view = new LinearLayout(this);
view.setLayoutParams(new RelativeLayout.LayoutParams( …Run Code Online (Sandbox Code Playgroud) 目标:在网站加载完成后截取WKWebView的截图
采用的方法:
创建了一个名为screen capture()的扩展方法,它获取了WKWebView的图像
使我的UIViewController实现WKNavigationDelegate
设置wkwebview.navigationDelegate = self(在UIViewController init中)
在UIViewcontroller中实现didFinishNavigation委托func,为WKWebView调用屏幕捕获扩展方法
Run Code Online (Sandbox Code Playgroud)func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) { let img = webView.screenCapture() }
问题:
我在这里错过了什么?我查看了WKWebView的所有可能的委托函数,没有其他任何东西似乎代表WKWebView中内容加载的完成.如果有解决方法,将不胜感激
更新:添加我用于截取Web视图截屏的截图代码
class func captureEntireUIWebViewImage(webView: WKWebView) -> UIImage? {
var webViewFrame = webView.scrollView.frame
if (webView.scrollView.contentSize != CGSize(width: 0,height: 0)){
webView.scrollView.frame = CGRectMake(webViewFrame.origin.x, webViewFrame.origin.y, webView.scrollView.contentSize.width, webView.scrollView.contentSize.height)
UIGraphicsBeginImageContextWithOptions(webView.scrollView.contentSize, webView.scrollView.opaque, 0)
webView.scrollView.layer.renderInContext(UIGraphicsGetCurrentContext())
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
webView.scrollView.frame = webViewFrame
return image
}
return nil
}
Run Code Online (Sandbox Code Playgroud) 我在android中实现了新的Chrome Custom Tab,我使用以下代码打开
Uri uri = Uri.parse("https://akash.plobal.com/ploicy");
CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
intentBuilder.setToolbarColor(Color.BLACK);
intentBuilder.setShowTitle(true);
intentBuilder.build().launchUrl(getActivity(), uri);
Run Code Online (Sandbox Code Playgroud)
我需要隐藏工具栏中标题下方的URL
StackOverflow 上有很多关于此问题的帖子,但没有一个为 Web 应用程序提供解决方法,以便在嵌入式浏览器(如 iOS 上的 Facebook/Facebook Messenger)中通过 Google Web Auth 登录服务;但我发现 Pinterest 的网络登录与 Google 按钮似乎可以正常工作,所以我想知道是否有人知道如何让它工作。
几年前,Google 禁止从 webview 登录 Google , Auth0 也发表了一篇有关解决方法的博客文章,但这一切似乎都集中在本机应用程序上,而不是提供 Google 作为登录选项的 Web 应用程序。
但我公司的应用程序是一个网络应用程序,我们希望当有人在 Facebook Messenger/Facebook 帖子上分享我们网站的链接时,用户可以使用 Google 登录,即使他们没有弹出本机 Safari 浏览器。根据上述文档,这似乎是不可能的 - 但实际上我发现 Pinterest 的“使用 Google 登录”按钮确实有效!所以看来有一种方法可以让 Google 登录正常工作(不确定他们是否与 Google 达成了特殊协议,或者他们是否正在做我们/Auth0 也可以做的事情)。
重现步骤:
https://community.auth0.com为了证明似乎确实有一种方法可以在野外完成此操作:
webview ×10
android ×8
javascript ×2
anchor ×1
cordova ×1
google-oauth ×1
html ×1
ios ×1
mobile ×1
objective-c ×1
performance ×1
swift ×1