0

ユーザー定義の Web サイトが読み込まれる Webview があり、WebView の下のボタンを押すと、(リモート URL から) Javascript がユーザーがいるページに読み込まれます。

次に、この JavaScript 内の関数を起動する必要がありますが、機能していないようです。

私の活動:

public class SearchViewer extends SherlockActivity {

    TextView grabit;
    WebView webView;
    ImageView right, left;
    ProgressBar progressBar;

    @SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.searchviewer);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setIcon(R.drawable.ic_arrowleft);

        Intent intent = getIntent();
        String url = intent.getStringExtra("URL");
        String name = intent.getStringExtra("Name");
        setTitle(name);

        progressBar = (ProgressBar) findViewById(R.id.progressBar1);

        webView = (WebView) findViewById(R.id.webView1);
        webView.loadUrl(url);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return false;
            }

            public void onPageFinished(WebView view, String url) {
                // TODO Auto-generated method stub
                super.onPageFinished(view, url);

                progressBar.setVisibility(View.GONE);

            }
        });
        grabit = (TextView) findViewById(R.id.grabit);
        grabit.setOnClickListener(OnClick_grabit);

        right = (ImageView) findViewById(R.id.right);
        left = (ImageView) findViewById(R.id.left);

        right.setOnClickListener(OnClick_right);
        left.setOnClickListener(OnClick_left);

    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

        case android.R.id.home:
            finish();
            break;

        default:
            return super.onOptionsItemSelected(item);
        }
        return false;
    }

    public void onStart() {
        super.onStart();
        EasyTracker.getInstance(this).activityStart(this);
    }

    public void onStop() {
        super.onStop();
        EasyTracker.getInstance(this).activityStop(this);
    }

    private OnClickListener OnClick_grabit = new OnClickListener() {
        public void onClick(View v) {
            webView.loadUrl("javascript: function loadScript(scriptURL) { var scriptElem = document.createElement('SCRIPT'); scriptElem.setAttribute('language', 'JavaScript'); scriptElem.setAttribute('src', scriptURL); document.body.appendChild(scriptElem);} loadScript('http://www.pathtofile.com/javascript.js');");
            webView.loadUrl("javascript: initialize("+1+")");
        }
    };
    private OnClickListener OnClick_right = new OnClickListener() {
        public void onClick(View v) {
            webView.goForward();
        }
    };
    private OnClickListener OnClick_left = new OnClickListener() {
        public void onClick(View v) {
            webView.goBack();
        }
    };

JavaScriptをロードすると

webView.loadUrl("javascript: function loadScript(scriptURL) { var scriptElem = document.createElement('SCRIPT'); scriptElem.setAttribute('language', 'JavaScript'); scriptElem.setAttribute('src', scriptURL); document.body.appendChild(scriptElem);} loadScript('http://www.pathtofile.com/javascript.js');");

initialize()Javascriptファイル内でJavascript関数を開始すると、正常に動作します。ただし、上記の2行を実行しようとすると

webView.loadUrl("javascript: function loadScript(scriptURL) { var scriptElem = document.createElement('SCRIPT'); scriptElem.setAttribute('language', 'JavaScript'); scriptElem.setAttribute('src', scriptURL); document.body.appendChild(scriptElem);} loadScript('http://www.pathtofile.com/javascript.js');");
                webView.loadUrl("javascript: initialize("+1+")");

それはうまくいきません.JavascriptをロードしてAndroidから関数を起動して値を渡すにはどうすればよいですか.

私が試してみました

private OnClickListener OnClick_grabit = new OnClickListener() {
        public void onClick(View v) {
            webView.loadUrl("javascript: function loadScript(scriptURL) { var scriptElem = document.createElement('SCRIPT'); scriptElem.setAttribute('language', 'JavaScript'); scriptElem.setAttribute('src', scriptURL); document.body.appendChild(scriptElem);} loadScript('http://www.pmdev.co.uk/dadg-giftgrabber/android/gift-grabber.js');");
            webView.setWebViewClient(new WebViewClient(){

                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    webView.loadUrl("javascript: initialize("+1+")");
                }

            });
        }
    };

しかし、これは機能しません

4

2 に答える 2