2011-05-10 168 views
1

我已經搜索高和低解決這個問題的解決方案,雖然我發現一個問題,我發現零響應。我會佈置整個情況,因爲也許有一個解決方案,我沒有看到...Android WebView.loadDataWithBaseURL()JavaScript注入問題

我有一個HTML文件加載到用戶的SD卡。我使用WebView.loadURL(...)將該HTML文件加載到WebView中。這工作正常。這HTML引入外部JavaScript文件,像這樣:

<script type='text/javascript' src='js/jquery-1.3.2.min.js' /> 
<script type='text/javascript' src='js/inPractice-utilities.js' /> 
<script type='text/javascript' src='js/inPractice.js' /> 
<script type='text/javascript' src='js/mobile/inpractice.ipad.js /'> 

當然,這並不因爲SDK 1.0,能力負荷這個外部代碼被認爲是一個安全問題(或至少這就是我的理解是)後工作。我更改了每個HTML文件(有數百個)以使用內聯Javascript,並且一切正常。

每個HTML文件都有使用其「onClick」事件調用Javascript方法的鏈接。

<a href="/drug" onclick="return content('drug', {name:'Tamoxifen', pageId:'9475b30a-5a8b-04fa-f975-7fcaeaa0a2cf'});">Tamoxifen</a> 

正如您所看到的,當用戶單擊此鏈接時會調用JavaScript方法「content」。這也很好。

但是,有些文件有「支持資產」的鏈接,除了沒有實際的頁面外,它們本身就是獨立的HTML頁面。這裏有一個例子:

<a href="/supportingAsset" onclick="return content('supportingAsset', {'html':'<div class='supportingAsset'><p><a href='/drug' onclick='return content('drug', {name:'Tamoxifen', pageId:'9475b30a-5a8b-04fa-f975-7fcaeaa0a2cf'});'>Tamoxifen</a>'});">Supporting Asset</a> 

*注意,有可能是在我的休閒一些語法問題,但我答應了語法都是在實際的碼是否正確。

所以,這裏的問題是支持資產HTML被包含爲調用Javascript方法「內容」的參數。爲了當用戶點擊該資產支持顯示此內容,我用...

webView.loadDataWithBaseURL("file://" + baseLocation, html, "text/html", "utf-8", null); 

...其中「HTML」是傳遞到Javascript方法,「內容」的HTML。這個新頁面顯示正常,但是......如果您注意到支持的資產內容中有另一個鏈接調用JavaScript方法「內容」。這就是問題所在......

我試過追加...

<script type='text/javascript' src='js/jquery-1.3.2.min.js' /> 

...到原始的HTML加載到web視圖之前。沒有。

我試過追加內嵌Javascript方法。沒有。

我試過頁面加載後添加JavaScript方法...

@Override 
    public void onPageFinished(WebView view, String url) { 
     if (loadingPageDialog != null) { 
      loadingPageDialog.dismiss(); 
     } 

     view.loadUrl("javascript:(function content(path, params) { " + 
       "document.getElementsByTagName('body')[0].style.color = 'red'; " + 
     "})()"); 
    } 

...什麼都沒有。

實際問題

有誰知道的一種方法,我可以注入Javascript方法「內容」,使得現有呼叫到「內容」的作品?請注意,我無法將呼叫更改爲「內容」,並且顯示支持資產內容的網絡視圖與原始網絡視圖不同。

回答

0

我相信你有一個錯字。更改,

"file://" 

"file:///"