Skip to content

Js code contains timer, exit webvie_scaffold, and the timer still runs. #278

@ArlenFuCN

Description

@ArlenFuCN

I use the webview_scaffold to open a web.
the webpage contains contains a timer.
this is a html file I have used:

<html>

<head>

<title>Timer</title>
<script>

var s;

function $(id){

return document.getElementById(id);

}

function display(){

var date = new Date();

var str  = date.getTime(); 

$("content").value = str;

console.log("this this a console log..." + str);

s = setTimeout('display()',1000);

}

window.onload = function(){

$("start").onclick =function(){display();} 

$("stop").onclick = function(){clearTimeout(s);}

}

</script>

</head>

<body>

<input type = "text" id=content>

<input type = button id=start value="Start">

<input type = button id=stop value="End">

</body>

</html>

It means that change the display num and print some log per second.

this is my webviewPage.dart

//! WebViewPage
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

class AppWebView extends StatelessWidget {
  final String url;
  final String title;

  AppWebView(this.url, this.title);

  _renderTitle() {
    if (url == null || url.length == 0) {
      return new Text(title);
    }
    return new Row(children: [
      //new Expanded(child: new Container()),
      new Text(title)
    ]);
  }

  @override
  Widget build(BuildContext context) {
    return new WebviewScaffold(
      withJavascript: true,
      hidden: false,
      url: url,
      scrollBar:false,
      withLocalUrl: true,
      appBar: new AppBar(
        title: _renderTitle(),
      ),
    );
  }
}

when I open the webview to the html file,then I press the start button on this web.Finally I exit the webview.

this is my log:

I/flutter ( 4095): 运维页面
I/zygote64( 4095): Compiler allocated 8MB to compile void android.view.ViewRootImpl.performTraversals()
D/ViewRootImpl@d8ee1fe[MainActivity]( 4095): ViewPostIme pointer 0
D/ViewRootImpl@d8ee1fe[MainActivity]( 4095): ViewPostIme pointer 1
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273611702", source: http://192.168.10.104/test.html (24)
V/InputMethodManager( 4095): Starting input: tba=android.view.inputmethod.EditorInfo@560ef34 nm : com.example.dfelectricapp ic=null
I/InputMethodManager( 4095): startInputInner - mService.startInputOrWindowGainedFocus
D/InputMethodManager( 4095): HSIFW - flag : 0 Pid : 4095
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273612709", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273613719", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273614726", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273615730", source: http://192.168.10.104/test.html (24)
D/ViewRootImpl@d8ee1fe[MainActivity]( 4095): ViewPostIme pointer 0
D/ViewRootImpl@d8ee1fe[MainActivity]( 4095): ViewPostIme pointer 1
I/flutter ( 4095): 运维页面show web
I/flutter ( 4095): this is webview dispose
D/InputMethodManager( 4095): HSIFW - flag : 0 Pid : 4095
V/InputMethodManager( 4095): Starting input: tba=android.view.inputmethod.EditorInfo@95fe15d nm : com.example.dfelectricapp ic=null
I/InputMethodManager( 4095): startInputInner - mService.startInputOrWindowGainedFocus
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273617383", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273619384", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273621385", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273623384", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273625384", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273627383", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273629384", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273631384", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273633385", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273635384", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273637385", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273639385", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273641385", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273643385", source: http://192.168.10.104/test.html (24)
I/chromium( 4095): [INFO:CONSOLE(24)] "this this a console log...1545273645385", source: http://192.168.10.104/test.html (24)

You can see that I've quit the webview but the log is still being printed.

I try to solve this problem.So here's what I did.
In the webview_scaffold.dart

 @override
  void dispose() {
    super.dispose();
    webviewReference.reloadUrl(""); //! I add this line
    _resizeTimer?.cancel();
    webviewReference.close();
    if (widget.hidden) {
      _onStateChanged.cancel();
    }
    print("this is webview dispose");
    webviewReference.dispose();
  }

It worked,But I don't know the reason.
Am I right?
I want to know why the js consle log still being printed.
Thanks very much.

btw:
this is flutter doctor print:
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, v0.11.7, on Microsoft Windows [Version 10.0.17134.471], locale zh-CN)
[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[√] Android Studio (version 3.2)
[√] Connected device (1 available)

• No issues found!

this is the dependencies:
flutter_webview_plugin: ^0.3.0+2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions