Android WebView "无法读取 property "getAttribute' 的定义"

发布时间: 2016/10/10 21:17:02
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图运行一个 web 页面 WebView 。我加载的页面有 javascript 在它,和它的作品在我的桌面上 browser 但不工作 android 仿真器。在仿真器中,出现此错误︰

09-13 18:29:18.496 32087-32087/com.gamesmart.gamesmart 我 / 铬: [INFO:CONSOLE(91)]"未捕获的 TypeError︰ 无法读取 property 'getAttribute' 的定义",源︰ http://dev.gamesmart.com/mobile (91)

我在页面运行的 javascript 代码看起来像这样︰

<script>
    window.onload = function(){
        var items = document.querySelectorAll('a.item');
        for(var i = 0; i < items.length; i++){
            var item = items[i];
            item.addEventListener('click', function(event){
                event.preventDefault();
                window.JSInterface.playGame(items[i].getAttribute('href'));
            });
        }
    }
</script>

然后我运行的 Java 看起来像这样︰

public class MainActivity extends AppCompatActivity {

    private WebView webView;
    private WebViewClient client;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        JavaScriptInterface jsInterface = new JavaScriptInterface(this);

        // Setup the WebView
        webView = (WebView) findViewById(R.id.webView);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        webView.setWebChromeClient(new WebChromeClient());

        webView.setInitialScale(1);
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setDomStorageEnabled(true);

        webView.addJavascriptInterface(jsInterface, "JSInterface");

        // Load a default URL into the webview
        webView.loadUrl("http://dev.gamesmart.com/mobile");
    }

}

我错过了什麽吗?

解决方法 1:

请尝试更换这

window.JSInterface.playGame(items[i].getAttribute('href'));

与此

window.JSInterface.playGame(item.getAttribute('href'));
赞助商