gpt4 book ai didi

javascript - 将 javascript 注入(inject) Android webview 不显示

转载 作者:行者123 更新时间:2023-11-29 23:38:27 26 4
gpt4 key购买 nike

我有一个从第 3 方获得的网址。我需要加载这个 url,在用户输入密码后,它应该向 android 客户端发送一个 token 。网址如下所示:

https://api.sandbox.veritrans.co.id/v2/token/redirect/521111-1117-bad66da4-cc24-4c59-9ef6-05641fc82c60

我在 webview 中打开 url。我的 webview fragment 如下所示:

public class WebView3DSFragment extends Fragment {

@BindView(R.id.webview_3ds)
WebView webView;


public static WebView3DSFragment newInstance(Bundle b) {
WebView3DSFragment fragment = new WebView3DSFragment();
fragment.setArguments(b);
return fragment;
}

@SuppressLint("SetJavaScriptEnabled")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_3ds_webview, container, false);
ButterKnife.bind(this, rootView);

String url = getArguments().getString("url", "");
if (url != null) {
webView.getSettings().setJavaScriptEnabled(true);
injectJavaScript();
webView.loadUrl(url);



}
return rootView;
}

public void injectJavaScript(){
webView.addJavascriptInterface(new JS3DSInterface(), "Android");
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webView.loadUrl(
"javascript:(function callback(response) {\n" +
" if (response.redirect_url) {\n" +
" // If 3Dsecure transaction. Open 3Dsecure dialog\n" +
" console.log('Open Dialog 3Dsecure');\n" +
" openDialog(response.redirect_url);\n" +
"\n" +
" } else if (response.status_code == '200') {\n" +
" // success 3d secure or success normal\n" +
" //close 3d secure dialog if any\n" +
" closeDialog();\n" +
"\n" +
" // store token data in input #token_id\n" +
" $(\"#token-id\").val(response.token_id);\n" +
" " +"Android.set3DSToken(response.status_message)"+

"\n" +
" } else {\n" +
" // failed request token\n" +
" //close 3d secure dialog if any\n" +
" closeDialog();\n" +
" $('#submit-button').removeAttr('disabled');\n" +
" // Show status message.\n" +
" $('#message').text(response.status_message);\n" +
"console.log(JSON.stringify(response));\n" +
" }\n" +
" }\n" +
"\n" +
" // Open 3DSecure dialog box\n" +
" function openDialog(url) {\n" +
" // make sure to load fancybox in a script tag\n" +
" $.fancybox.open({\n" +
" href: url,\n" +
" type: 'iframe',\n" +
" autoSize: false,\n" +
" width: 400,\n" +
" height: 420,\n" +
" closeBtn: false,\n" +
" modal: true\n" +
" });\n" +
" }\n" +
"\n" +
" // Close 3DSecure dialog box\n" +
" function closeDialog() {\n" +
" $.fancybox.close();\n" +
" }\n" +
"});");
}
});

}

class JS3DSInterface {

@JavascriptInterface
public String set3DSToken(String s) {
return "Java method called!!"+s;
}
}
}

我在代码中的javascript实际上是在这里找到的:

http://api-docs.midtrans.com/#get-token

我觉得如果我能够将这个 javascript 注入(inject)到 webview 中,那么当用户在那里输入信息时我可以得到回调。但是当我运行 webview 时,url 会加载,但是当我在 chrome://inspect 中检查 stetho 时,webview 不包含我输入的 javascript。我如何注入(inject) javascript?

更新:连下面的都注入(inject)失败:

webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:alert('called by Android')");
}
}

因为我从来没有看到显示的警报。

最佳答案

在 WebView 中加载 javascript

webView.getSettings().setDomStorageEnabled(true);

更多引用JavaScript not working in Android Webview?

关于javascript - 将 javascript 注入(inject) Android webview 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45841240/

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