我的应用中有两个Web视图,一个Web视图无法删除Web视图中的内容

时间:2018-07-27 14:37:03

标签: javascript android webview

我的Android应用程序中有两个webview,一个webview会根据给定的javascript函数删除内容,而另一个,即使我通过id给出了javascript函数,也是如此。主Web视图运行正常,其他Web视图运行不正常,如果第二个Web视图运行良好,我现在可以集成另一个Web视图。

这是我的第一个网络视图,运行正常

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.webView);
        webView.setWebViewClient(new myWebClient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("url");
        webView.getSettings().setDomStorageEnabled(true)



    public class myWebClient extends WebViewClient
    {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);

            view.loadUrl("javascript:(function() {document.getElementById('mainHeader').style.display='none';" + "document.getElementById('footerRights').style.display='none';" + "document.getElementById('navTrail').style.display='none';" + "document.getElementById('threeColumns').style.display='none';" + " })()");

        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }


        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);

        }


    }


    @Override
    // This method is used to detect back button
    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            // Let the system handle the back button
            super.onBackPressed();
        }
    }
}

我的第二次网络浏览

  

public class webview2 extends AppCompatActivity {

    private WebView webVIEW;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);

        webVIEW = (WebView) findViewById(R.id.webVIEW);
        webVIEW.setWebViewClient(new WebViewClient());
        webVIEW.getSettings().setJavaScriptEnabled(true);
        webVIEW.loadUrl("example url");
        webVIEW.getSettings().setJavaScriptEnabled(true);
        webVIEW.getSettings().setDomStorageEnabled(true);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    }

    public class webVIEW extends WebViewClient {

        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            view.loadUrl("javascript:(function() { " + "var element = document.getElementById('hplogo');" + "element.parentNode.removeChild(element);" + " })()");
        }


        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon ) {
            super.onPageStarted(view, url, favicon);
        }

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
    }

    }

    @Override
    public void onBackPressed(){
        if (webVIEW.canGoBack()) {
            webVIEW.goBack();
        }else {
            super.onBackPressed();
        }
    }
}

webview2.java

它保持不变,没有javascript执行,现在我需要集成另一个Webview,它也需要与第一个Webview相同

预先感谢

1 个答案:

答案 0 :(得分:0)

我已经使用kotlin类解决了我的问题,因为我可以在一个或多个webview中注入Java脚本

class webview2 : AppCompatActivity() {

    private lateinit var webVIEW: WebView

    @SuppressLint("SetJavaScriptEnabled")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_webview)



        webVIEW = findViewById<WebView>(R.id.webVIEW) as WebView


        webVIEW.settings.javaScriptEnabled = true
        webVIEW.webViewClient = object : WebViewClient() {
            override fun onPageFinished(view: WebView, url: String) {
                injectJS()
            }
        }
        webVIEW.loadUrl("https://example/login")
    }


    val progressBar = findViewById<ProgressBar>(R.id.progressBar3)
    



    override fun onBackPressed() {
        if (webVIEW.canGoBack()) {
            webVIEW.goBack();
        } else {
            super.onBackPressed()
        }
    }

    private fun injectJS() {
        val jsContent: String?
        jsContent = try {
            val inputStream = assets.open("style.js")
            val fileContent = inputStream.bufferedReader().use(BufferedReader::readText)
            inputStream.close()
            fileContent
        } catch (e: Exception) {
            null
        }
        jsContent?.let { webVIEW.loadUrl("javascript:($jsContent)()") }
    }
}