Javascript не работает на Android WebView последовательно. Иногда это работает, в большинстве случаев это не так

Я пытаюсь добиться подсветки синтаксиса C-программы со страницы HTML.

"index.html", "prettify.css", "prettify.js" хранятся в папке ресурсов

Это код моего веб-просмотра:

package com.example.javascriptexample;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView wv=(WebView) findViewById(R.id.webView);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.getSettings().setDomStorageEnabled(true);
        wv.loadUrl("file:///android_asset/index.html");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

Соответствующий файл макета (XML):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <WebView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:id="@+id/webView" />

</RelativeLayout>

index.html выглядит следующим образом:

<HTML>
<body>

<pre>
<code class="prettyprint">
/*---------- PROGRAM USING IF STATEMENT --------*/
#include < stdio.h >
#include < conio.h >
void main()
   {
       int count, i;
       float weight, height;
       count = 0;
       printf("Enter weight and height for 10 boys\n");

       for (i =1; i <= 10; i++)
       {
      scanf("%f %f", &weight, &height);
      if (weight < 50 && height > 170)
         count = count + 1;
       }
       printf("Number of boys with weight < 50 kg\n");
       printf("and height > 170 cm = %d\n", count);
       getch();
   }
</code>
</pre>

<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script>

</body>
</HTML>

Я пытался искать в Интернете, но не смог решить эту проблему. Текст отображается, но не с подсветкой синтаксиса (то есть, возможно, что-то не так с тем, как я реализовал javascript в веб-просмотре. Однако скрипт работает без помех на моем компьютере, поэтому, возможно, я делаю какую-то ошибку, так как я новичок как для javascript, так и для android. Кстати, файлы prettify css и js написаны не мной, я скачал их из интернета (code.google.com)

Я прошел через другие подобные вопросы. Одним из предложенных решений было: "Вы должны заставить приложение ждать (попробуйте его, установите точку останова на веб-просмотре, а затем продолжите, и вы увидите, что веб-представление на этот раз будет надежно загружаться с использованием JavaScript). просто позволяйте приложению загружаться без точки останова, оно часто "пропускает" javascript. Требуется какой-то метод принудительного многопоточного ожидания ".

-Как это реализовать?? то есть, как установить точку останова и затем продолжить ее?

1 ответ

Решение

Вы написали, что сохранили "prettify.css", "prettify.js" в папке ресурсов, но не использовали их. Вместо этого вы загружаете скрипт по сети, что может вызвать проблемы с синхронизацией.

<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script>

Чтобы использовать ваши местные ресурсы, добавьте следующую ссылку в раздел заголовка

<link href="prettify.css" type="text/css" rel="stylesheet" />

и замените тег сетевого скрипта следующим

<script type="text/javascript" src="prettify.js"></script>
Другие вопросы по тегам