2017-01-26 7 views
0

Так я загрузка веб-страницы в WebView моего приложения и есть HTML-i class="img profimage" и имеет URL фонового изображения, и это моя цель ...JavaScript/Jsoup - Получить URL фонового изображения из «I степени»

Я хочу, чтобы получить эту цель либо с JavaScript или с помощью Jsoup ...

То, что я пытался до сих пор с Jsoup это:

public class GetImage extends AsyncTask<String, String, String> { 

protected String doInBackground(String... strings) { 

Document document = null; 

try { 

document = Jsoup.connect(url).get(); 

} catch (IOException e) { 

e.printStackTrace(); 

} 

String temp = document.select("i.img.profpic").first().getElementsByAttribute("style").toString(); 

return temp.substring(temp.indexOf("(") + 1, temp.indexOf(")")); 

} 

  

protected void onPostExecute(String result) { 

Log.d("ChatScreen", result); 

Toast.makeText(ChatScreen.this, result, LENGTH_SHORT).show(); 

} 

} 

Но я получаю NPE ... Я не Не знаете, как получить исходный код изображения я класс с помощью JavaScript ... Я могу найти множество примеров на веб-о том, как получить его для div с помощью ids

HTML структура страницы похожа на это:

<div ....> 
<div ....> 
<i class="img profimage" style="background-image: url("url here");"/> 
</div> 
</div> 
+0

Вам нужен URL-адрес изображения в виде строки? –

+0

@HarishKamboj да, потому что тогда я хочу загрузить его в ImageView с помощью Glide, поэтому мне нужен URL-адрес, чтобы передать его методу Glide. – Asama

ответ

0

this Answer Проверка может быть это сработает, но я этого не пробовал. Функция JS написана ниже в оценкеJavascript(), которая будет читать атрибут стиля, а затем вы можете использовать метод подстроки для получения URL-адреса.

webview.evaluateJavascript(
     "(function() { return (document.getElementsByTagName('i')[index].getAttribute('style')); })();", 
     new ValueCallback<String>() { 
      @Override 
      public void onReceiveValue(String html) { 
       Log.d("HTML", html); 
       // now use substring to get url..... 
      } 
    }); 

Надеюсь, это поможет вам.

0

Реферирование this ответа, вы можете попробовать что-то вроде ниже (при условии, что это единственный/первый элемент с классом profimage, в противном случае изменить индекс, т.е. [n], где n является индексом). В качестве альтернативы просто введите элемент уникальным id и используйте document.getElementById('imgid') и удалите [0]. Обернул ее в функцию, если вы хотите называть ее определенным событием.

function getUrl() { 
    var img = document.getElementsByClass('profimage'), 
    style = img[0].currentStyle || window.getComputedStyle(img[0], false), 
    bi = style.backgroundImage.slice(5, -2); 
    return bi; 
} 

нарезка удалит url(" до и после ") самого URL-адреса. Обратите внимание, что это возвращает полный URL-адрес.

Если это не сработает, вы можете попробовать style = img.style, вместо более длинного выражения в коде выше, поскольку фоновое изображение добавляется с встроенным css в самом элементе (<i ... style="background-image: url("url here");"/>). Это вернет URL в встроенный стиль, в данном случае url here.

+0

Эй, Теперь, когда я проверяю HTML-код веб-страницы, я ошибался в отношении «background-image» «tag, но это просто» background: # 222222 url («url here») «... Извините ... Не могли бы вы предоставить код для этого? – Asama

+0

@Asama должна быть в основном одинаковой, просто измените 'backgroundImage' на' background' и используйте другой параметр: 'slice (13, -2)' – pithonsmear

+0

и фоновый тег находится в файле style.css страницы, так что это isn ' t встроен в линию ... И все-таки? Я пробовал разные методы, включая ваши, и они отлично работают в jsfiddle, но возвращают null в webview ... Я не знаю, в чем проблема. – Asama