我已經搜索高和低解決這個問題的解決方案,雖然我發現一個問題,我發現零響應。我會佈置整個情況,因爲也許有一個解決方案,我沒有看到...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方法「內容」,使得現有呼叫到「內容」的作品?請注意,我無法將呼叫更改爲「內容」,並且顯示支持資產內容的網絡視圖與原始網絡視圖不同。