这是一个Fragment包含a 的基本代码WebView.
WebFragment.java
public class WebFragment extends Fragment {
String TAG = "WebFragment";
private WebView webView;
private String currentUrl = "http://www.google.com";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.webview_layout, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
webView = (WebView) getView().findViewById(R.id.helloWebview);
initWebView();
webView.loadUrl(currentUrl);
}
@SuppressLint("SetJavaScriptEnabled")
private void initWebView() {
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(), "HTMLOUT");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.e(TAG, "Loding...");
super.onPageStarted(view, url, favicon); …Run Code Online (Sandbox Code Playgroud) android android-webview android-fragments android-viewpager back-stack
我通常使用HTML5 PostMessage API将iframed内容中的信息传递给父框架.最近我在Android WebView中使用了我的内容(据我所知,这是iframe的原生Android相当).本机应用程序是否有办法监听我发送给他们的PostMessage事件?
我知道addJavascriptInterface存在,我只是希望有一种方法可以重用我现有的PostMessage代码,而无需编写新的东西.
我的问题是如下.
android:Theme.NoTitleBar.Fullscreen,只有一个Activity,所有其他视图都是FragmentWebView里面ViewPager Fragment有里面的东西ScrollViewWebViewWindow调整大小/平移我已经尝试过设置android:windowSoftInputMode="adjustResize"或者android:windowSoftInputMode="adjustPan"在我的清单中Activity.还尝试在java中设置其中一个.
我的应用程序中的正常EditText内部ScrollView确实正确调整平移,以便用户可以看到他/她正在键入的位置.
更新:
如果没有工作解决方案来调整窗口,有没有办法WebView认为它的内容就像半屏高度更大,所以用户至少可以滚动输入可见.
我在Android 4.0/4.1上有用户上传崩溃日志,但我无法重现它.日志是这样的:
java.io.IOException: close failed: EIO (I/O error)
libcore.io.IoUtils.close(IoUtils.java:41)
java.io.FileInputStream.close(FileInputStream.java:121)
android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:137)
android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:949)
java.lang.Thread.run(Thread.java:856)
cause by:
libcore.io.ErrnoException: close failed: EIO (I/O error)
libcore.io.Posix.close(Native Method)
libcore.io.BlockGuardOs.close(BlockGuardOs.java:75)
libcore.io.IoUtils.close(IoUtils.java:38)
java.io.FileInputStream.close(FileInputStream.java:121)
android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method)
android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:137)
android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:949)
java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)
有谁知道它是如何发生的?或者如何解决它?
我正在尝试使用WebView在我的活动中显示Flash内容.一切都运行得很好,但是当用户点击主页键将活动放入后台时,Flash内容会继续运行(声音继续播放等)
我注意到Android浏览器和Dolphin浏览器似乎都避免了这个问题,并且当浏览活动放到后台时正确暂停Flash内容.
理想情况下,我想要一个解决方案,如果活动正在完成,则完全杀死WebView,但是暂停它(基本上复制浏览器的默认行为)
这是一个简单的测试,我把它放在Kongregate上加载一个有一些背景音乐的游戏:
public class BrowserTest extends Activity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebView = new WebView(this);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setPluginsEnabled(true);
mWebView.loadUrl("http://m.kongregate.com/games/Jiggmin/the-game-of-disorientation-mobile");
setContentView(mWebView);
}
@Override
protected void onPause(){
super.onPause();
mWebView.pauseTimers();
if(isFinishing()){
mWebView.loadUrl("about:blank");
setContentView(new FrameLayout(this));
}
}
@Override
protected void onResume(){
super.onResume();
mWebView.resumeTimers();
}
}
Run Code Online (Sandbox Code Playgroud)
我看了一下股票浏览器的最新来源,似乎做了类似的事情(调用pauseTimers/resumeTimers),虽然我担心我一直在看的代码已经过时了,因为它调用的函数是don似乎不再存在了.
我确实通过使用更新计数器的简单JavaScript setInterval进行测试来验证对pauseTimers的调用是否正常.对于Window或View管理,我应该尝试一些其他明显的东西吗?
移动Flash播放器的文档说:
Flash Player还将自动暂停不在视图或前台应用程序中的SWF播放,例如在收到呼叫或警报响起时,以降低CPU利用率,电池使用率和内存使用率.
这似乎在股票浏览器和Dolphin浏览器中都很完美,但在我的应用程序中却没有.任何想法/解决方案将不胜感激!
更新:这是我们最终添加到我们的活动以使其工作的功能.我们在活动的onPause函数中使用"onPause",在activity的onResume函数中使用"onResume"调用它:
private void callHiddenWebViewMethod(String name){
if( mWebView != null ){
try {
Method method = WebView.class.getMethod(name);
method.invoke(mWebView);
} catch (NoSuchMethodException e) {
Log.error("No …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我在webview中加载了几个网站,现在我想保存网页,所以一段时间后即使没有互联网用户也能看到这些页面.但我对如何在缓存或任何其他媒体中保存整个网页感到困惑.最重要的是,即使没有互联网,我们也需要显示页面.有没有人以前实现过这个.请提供一些演示代码,因为这是我第一次尝试缓存.
谢谢
我的文件系统中有一个嵌入式html文件,如果我拖放文件,它可以正常工作
资产/ index.html的
我从这里测试了HTML5视频播放.工作良好.
现在,如果我想显示一个带有HTML5视频的嵌入式页面[在浏览器上工作]作为嵌入式文件,只需更改HTML5 android webView播放器的示例代码并拖放该项目的资产中的index.html即可不起作用,应用程序崩溃与此错误:
抱歉,app*意外停止了......
所以我只是改变
mWebView.loadUrl("http://freebsd.csie.nctu.edu.tw/~freedom/html5/");
Run Code Online (Sandbox Code Playgroud)
至
mWebView.loadUrl("file:///android_asset/index.html");
Run Code Online (Sandbox Code Playgroud)
它不起作用.
我缺少什么,是否有嵌入HTML5视频的基本示例?
我正在构建我的网站,我想知道用户是使用Android的浏览器还是使用带有webview的应用程序.
可能吗 ??
我想知道是否可以在WebView中仅显示网站的某些部分.例如,我有这个网站与以下HTML:
<html>
<body>
<div id="1">ID 1</id>
<div id="2">ID 2</id>
<div id="3">ID 3</id>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
可以仅在WebView中显示,例如,id ="3"的div的内容?我的代码是WebWiew:
WebViewClient WebClient = new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
};
WebView myWebView = (WebView) findViewById(R.id.webView1);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.setWebViewClient(WebClient);
myWebView.loadUrl("https://www.example.com");
Run Code Online (Sandbox Code Playgroud) 在WebView中加载某些网站时,我无法提交表单.单击提交输入(按钮)时,它会聚焦,但不会发生任何其他情况.
这些相同的网站适用于Chrome(在同一设备中).
我怎样才能解决这个问题?我缺少一个设置吗?
关于这个问题发生的原因的反馈也将受到赞赏.
重现步骤
https://m.ebay.com/预期行为:应提交搜索表单并显示搜索结果
实际行为:蓝色搜索按钮获得焦点(由明亮的边框表示),但没有其他任何事情发生.
BrowseActivity.java
public class BrowseActivity extends AppCompatActivity {
WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browse);
mWebView = (WebView) findViewById(R.id.home_wv_content);
mWebView.setWebViewClient(new WebViewClient());
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.getSettings().setJavaScriptEnabled(true);
// Ebay has a blue search button where this issue can be replicated
mWebView.loadUrl("https://m.ebay.com");
}
}
Run Code Online (Sandbox Code Playgroud)
activity_browse.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="my.example.BrowseActivity">
<WebView
android:id="@+id/home_wv_content"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
编辑:
我考虑过使用自定义JavaScript界面来捕获按钮上的点击,阅读输入查询然后重定向到搜索页面.
无论如何,这种方法与网站本身紧密耦合(例如ebay),我希望这可以与不同的网站一起使用.此外,我不希望网站上的更改破坏我的应用程序.
android ×10
android-webview ×10
back-stack ×1
caching ×1
html5 ×1
java ×1
javascript ×1
postmessage ×1
user-agent ×1
video ×1