gpt4 book ai didi

javascript - Android,从 WebView 内的 javascript 调用浏览器

转载 作者:行者123 更新时间:2023-12-02 16:06:33 25 4
gpt4 key购买 nike

我尝试调用设备的浏览器加载 WebView 中的页面,其中包含:

window.open(
'http://www.stackoverflow',
'_blank'.
);

我需要从加载到 WebView 的 html 中执行此操作

但是我没有成功,有什么想法吗!?

最佳答案

您需要在应用中执行以下几项操作:

  1. 按照@ajpolt的说法使用setJavaScriptCanOpenWindowsAutomatically。这将使 window.open 不会失败。

  2. 启用setSupportMultipleWindows。这使得 WebView 实际上尝试打开一个新窗口。否则,它将在同一个 WebView 中打开 URL。

  3. 连接到 WebChromeClient.onCreateWindow 回调并在其中创建一个新的 WebView 实例。对于这个新实例,您需要设置 WebViewClient 来从 shouldOverrideUrlLoading 启动 Intent。

下面是示例代码:

WebView webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.setWebChromeClient(new ChromeClient());

这是 ChromeClient:

class ChromeClient extends WebChromeClient {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
WebView tempWebView = new WebView(MainActivity.this);
tempWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(browserIntent);
return true;
}
});
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(tempWebView);
resultMsg.sendToTarget();
return true;
}
}

关于javascript - Android,从 WebView 内的 javascript 调用浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30671887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com