【发布时间】:2016-12-12 23:46:40
【问题描述】:
我正在尝试从网页上的元素加载数据,但它似乎从不正确的页面获取数据。
我调用 webview.loadUrl("url1")
然后从那里我使用 ShouldOverrideLoading 覆盖弹出窗口并在同一个 webview 和 OnPageFinished 上调用 webview.loadUrl("url2") 我也覆盖它并在该 webview 上调用 evaluatejavascript("document.getElementById(id)") OnPageFinished 内部。
我希望从结果中的第二个 url 获取数据,但它正在从加载的第一个 url 中提取数据。我似乎无法弄清楚为什么会这样。
提前谢谢你!
public override bool ShouldOverrideUrlLoading(WebView view, string url)
{
return HandleUrlLoading(view,url);
}
public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
{
string url = request.Url.ToString();
return HandleUrlLoading(view, url);
}
private bool HandleUrlLoading(WebView view, string url)
{
_handleUrlOverride?.Invoke(view, url);
return true; // then it is not handled by default action
}
public void UrlLoading(WebView view, string url)
{
switch (State)
{
case State.PlayerlessLobby:
_loginView.LoadUrl(url);
_progressBar.Visibility = ViewStates.Visible;
_lobbyView.Visibility = ViewStates.Invisible;
_state = State.Login;
break;
case State.Lobby:
_gameView.LoadUrl(url);
_progressBar.Visibility = ViewStates.Visible;
_loginView.Visibility = ViewStates.Invisible;
_lobbyView.Visibility = ViewStates.Invisible;
_state = State.Game;
break;
case State.Game:
break;
case State.Login:
_loginView.Visibility = ViewStates.Invisible;
_progressBar.Visibility = ViewStates.Visible;
_loginView.LoadUrl(url);
_state = State.Lobby;
break;
}
}
UrlLoading 方法分配给 _handleUrlOverride
发生了什么是_loginView加载登录页面
_loginView.LoadUrl(url);
_progressBar.Visibility = ViewStates.Visible;
_lobbyView.Visibility = ViewStates.Invisible;
_state = State.Login;
然后在登录页面上输入凭据并点击登录。登录页面重定向并进入此代码。
_loginView.Visibility = ViewStates.Invisible;
_progressBar.Visibility = ViewStates.Visible;
_loginView.LoadUrl(url);
_state = State.Lobby;
loginView加载重定向后的OnPageFinished是这个
var result = new JavaScriptResult();
result.SetCallback(this);
_loginView.EvaluateJavascript("document.body.children[0].innerHTML", result);
_loginView.Visibility = ViewStates.Visible;
但返回的 javascript 是来自第一页的 div。
编辑:
似乎即使我覆盖了弹出加载,并且如果我不调用 webview.loadUrl("url2") 仍然会为此页面触发 onPageFinished。所以我不明白为什么它会被加载,即使它应该被覆盖。
【问题讨论】:
-
能否请您出示一下您的
ShouldOverrideLoading的代码? -
我用请求的代码更新了它
标签: android xamarin xamarin.android android-webview