【发布时间】:2014-08-26 20:21:29
【问题描述】:
我正在为 Android 编写一个小 Web 应用程序,我需要从 HTML 页面获取一些 JS 变量,但 setParam(final String str) 中的代码从未被调用。
此外,onPageStarted(...) 和 onPageFinished(...) 中的代码也从未被调用过,我不知道为什么。
void startPageParse()
{
WebView web = new WebView(context);
web.getSettings().setJavaScriptEnabled(true);
web.addJavascriptInterface(new Object(){
@JavascriptInterface
public void setParam(final String str)
{
setParamFromJS(str);
}
}, "JSInterface");
web.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap fav)
{
super.onPageStarted(view, url, fav);
Log.v("WebCLI", "Started");
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:JSInterface.setParam(flashvars['pl'])");
Log.v("WebCLI", "JSCalled");
}
});
web.loadUrl(SeasonURL);
Log.v("WebCLI", "Load called");
}
如果我在“web.loadUrl(SeasonURL)”处设置断点,它可以工作(!)并且这些行将在 logcat 中:
08-28 13:22:12.766 4294-4294/shirokovoi.ChromeCastSSApp W/chromium﹕ [WARNING:jni_string.cc(28)] ConvertJavaStringToUTF8 called with null string.
08-28 13:22:12.875 4294-4356/shirokovoi.ChromeCastSSApp W/chromium﹕ [WARNING:proxy_service.cc(890)] PAC support disabled because there is no system implementation
08-28 13:22:15.290 4294-4294/shirokovoi.ChromeCastSSApp V/WebCLI﹕ Load called
08-28 13:22:15.610 4294-4294/shirokovoi.ChromeCastSSApp I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@425157a8 time:786230
08-28 13:22:15.625 4294-4294/shirokovoi.ChromeCastSSApp V/WebCLI﹕ Started
08-28 13:22:20.586 4294-4294/shirokovoi.ChromeCastSSApp V/WebCLI﹕ Uncaught SyntaxError: Unexpected identifier
08-28 13:22:20.586 4294-4294/shirokovoi.ChromeCastSSApp I/chromium﹕ [INFO:CONSOLE(1)] "Uncaught SyntaxError: Unexpected identifier", source: %SOMEURL% (1)
08-28 13:22:24.469 4294-4294/shirokovoi.ChromeCastSSApp V/WebCLI﹕ JSCalled
如果此活动作为主要活动,这也有效。
【问题讨论】:
-
第一个问题:
INTERNET在清单中授予权限? -
是的,INTERNET 和 ACCESS_NETWORK_STATE 在清单中被授予
-
你什么时候打电话给
startPageParse? -
在构造方法中
-
我想我需要看一些日志然后什么的......如果你在
onCreate中调用这个方法,context确实是Activity,你有适当的权限,SeasonURL解析为 200 状态,那么我看到的唯一缺陷是 javascript 调用,但可以在您能够加载页面后解决。
标签: android webview webviewclient