Android WebView.loadDataWithBaseURL()JavaScript注入问题

时间:2011-05-10 14:49:31

标签: javascript android android-webview

我已经搜索了这个问题的解决方案,我发现了一个问题,但我发现零响应。我将列出整个情况,因为可能有一个我没有看到的解决方案......

我将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方法“content”的调用中。为了在用户点击支持资产时显示此内容,我使用...

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

...其中“html”是传递给Javascript方法的HTML,“content”。这个新页面显示正常,但是......如果你在支持资产内容中注意到,有另一个链接可以调用Javascript方法,“内容”。这就是问题所在......

我试过追加......

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

...将原始HTML加载到webview之前。什么都没有。

我尝试添加内联Javascript方法。什么都没有。

我尝试在pageLoad ...

之后添加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方法“内容”的方式,以便现有的“内容”调用有效?请注意,我无法将呼叫更改为“内容”,并且显示支持资产内容的Web视图与原始webview位于不同的活动中。

1 个答案:

答案 0 :(得分:0)

我相信你有一个错字。变化,

"file://"

"file:///"