WebView android/JS

353
20 января 2017, 09:26

Здравствуйте. Я реализую WebView следующим образом:

public class MainActivity extends AppCompatActivity {
    private WebView mWebView;
    private TextView textView;
    private Button btnMyAudio;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.webView1);
        textView = (TextView) findViewById(R.id.textView);
        mWebView.getSettings().setJavaScriptEnabled(true);        
        mWebView.loadUrl("http://anika-cs.ru/app/music/index.html");
        mWebView.setWebViewClient(new MyWebViewClient());
    }
    private class MyWebViewClient extends WebViewClient
    {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {
            view.loadUrl(url);
            return true;
        }
        @Override
        public void onPageFinished(WebView view, String url) {
           /* view.loadUrl("javascript:(function() { \" +\n" +
                    "            \"hide('dev_req_run_btn');\"+\n" +
                    "            \"var panel = document.getElementById('dev_const_count');\"+\n" +
                    "            \"panel.style['width'] = '550px';\"+\n" +
                    "            \"function hide(id){if (document.getElementById(id)){document.getElementById(id).style['display'] = 'none';}}\"+\n" +
                    "            \"})()");*/
            injectScriptFile(view, "js/script.js");
        }
        private void injectScriptFile(WebView view, String scriptFile) {
            InputStream input;
            try {
                input = getAssets().open(scriptFile);
                byte[] buffer = new byte[input.available()];
                input.read(buffer);
                input.close();                
                String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
                view.loadUrl("javascript:(function() {alert('dsdsd');})()");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

Вот мой код html:

function myFunction() {
    document.getElementById("demo").innerHTML = "YOU CLICKED ME!";
}
</script>
</head>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
<div style="widh:200px;height:200px;background-color:red;" id="block1">
</div>
<div style="widh:200px;height:200px;background-color:gray;">
<button onclick="" id="dev_const_ovner">OK</button>
</div>
    <p id="demo" onclick="myFunction()">Click me.</p>
</body>
</html>

Страницу загружает, но как мне выполнить js, после загрузки страницы??Хотя бы на примере вывода alert диалога? Спасибо.

Answer 1

К mWebView надо добавить WebChromeClient, тогда будет работать

view.loadUrl("javascript:(function() {alert('dsdsd');})()");

Добавление WebChromeClient

mWebView.setWebChromeClient(new WebChromeClient());
Answer 2

Без метода инъекции в onPageFinished:

view.loadUrl(
  "javascript:(function() { " + 
    "var element = document.getElementById('dev_const_owner_id');" + 
    "element.value='185645054';" + 
  "})()"
);

Работает.

READ ALSO
jQeury ui: подмена DOM-элемента при операции DRAG&amp;DROP

jQeury ui: подмена DOM-элемента при операции DRAG&DROP

Возможно ли при перетаскивании DOM-элемента средствами jQeury UI заменить перетаскиваемый объект, например, во время выхода его за пределы указанного...

309