【问题标题】:WebView addJavascriptInterface function with Parameters带参数的 WebView addJavascriptInterface 函数
【发布时间】:2012-03-17 12:14:15
【问题描述】:

我已经向 WebView 添加了一个 JavaScript 接口。

我可以使用所有没有参数的函数。

但是当我从 JavaScript 中给出参数时。 WebView 不调用该函数。

查看代码

Javascript

        function getCellString(row, column) {
            return Report.getCellString(row,column);
        }

网页视图

webView.addJavascriptInterface(new JavaScriptInterface(), "Report");

Javascript 接口

public class JavaScriptInterface
{
public String getCellString(int row, int column)
{
    return row + "," + column;
}
}

我不确定是因为String返回类型还是函数的参数。

已编辑

我尝试不给 getCellString() 提供任何参数,但它仍然没有被调用。

这意味着问题在于返回类型。我给出了不是原始数据类型的 String 返回类型。

谁能告诉我应该用什么数据类型来代替字符串以便它接受。

添加JavaScript接口后的LogCat

   03-17 17:52:26.748: V/webcore(19908): ADD_JS_INTERFACE arg1=0 arg2=0 obj=android.webkit.WebViewCore$JSInterfaceData@44dfe378
03-17 17:52:26.858: V/webcore(19908): LOAD_URL arg1=0 arg2=0 obj=android.webkit.WebViewCore$GetUrlData@44dff760
03-17 17:52:26.858: V/webcore(19908):  CORE loadUrl file:///data/data/mypackage/cache/html_report/ReportHTML.html
03-17 17:52:26.858: V/webkit(19908): startLoadingResource: url=file:///data/data/mypackage/cache/html_report/ReportHTML.html, method=GET, postData=null, isMainFramePage=true, mainResource=true, userGesture=true
03-17 17:52:26.858: V/webkit(19908): LoadListener constructor url=file:///data/data/mypackage/cache/html_report/ReportHTML.html
03-17 17:52:26.868: V/webview(19908): WEBCORE_INITIALIZED_MSG_ID
03-17 17:52:26.868: V/webkit(19908): LoadListener: from: file:///data/data/mypackage/cache/html_report/ReportHTML.html major: 1 minor: 1 code: 200 reason: OK
03-17 17:52:26.878: V/webkit(19908): LoadListener.headers
03-17 17:52:26.878: V/webcore(19908): 200 arg1=0 arg2=0 obj=null
03-17 17:52:26.878: V/webkit(19908): LoadListener.data(): url: file:///data/data/mypackage/cache/html_report/ReportHTML.html
03-17 17:52:26.878: V/webkit(19908): LoadListener.data(): url: file:///data/data/mypackage/cache/html_report/ReportHTML.html
03-17 17:52:26.888: V/webkit(19908): LoadListener.endData(): url: file:///data/data/mypackage/cache/html_report/ReportHTML.html
03-17 17:52:26.898: V/webkit(19908): guessMimeTypeFromExtension: url = file:///data/data/mypackage/cache/html_report/ReportHTML.html
03-17 17:52:26.908: V/webview(19908): sendOurVisibleRect=(0,55,r=240,b=320
03-17 17:52:26.908: V/webview(19908): setCertificate=null
03-17 17:52:26.988: V/webkit(19908): LoadListener.detachRequestHandle(): requestHandle: null
03-17 17:52:27.098: V/webview(19908): SET_SCROLLBAR_MODES
03-17 17:52:27.098: V/webview(19908): SET_SCROLLBAR_MODES
03-17 17:52:27.098: V/webview(19908): SET_SCROLLBAR_MODES
03-17 17:52:27.098: V/webcore(19908): didFirstLayout standardLoad =true
03-17 17:52:27.108: V/webcore(19908): SET_SCROLL_OFFSET arg1=0 arg2=0 obj=Point(0, 0)
03-17 17:52:27.108: V/webview(19908): UPDATE_TEXT_ENTRY_MSG_ID
03-17 17:52:27.108: V/webcore(19908): SET_GLOBAL_BOUNDS arg1=0 arg2=0 obj=Rect(0, 55 - 240, 320)
03-17 17:52:27.118: V/webcore(19908): VIEW_SIZE_CHANGED arg1=0 arg2=0 obj=android.webkit.WebView$ViewSizeData@44d1d2c8
03-17 17:52:27.118: V/webcore(19908): viewSizeChanged w=313; h=353; textwrapWidth=313; scale=0.75
03-17 17:52:27.118: V/webcore(19908): viewSizeChanged
03-17 17:52:27.118: V/webcore(19908): SET_ACTIVE arg1=0 arg2=0 obj=null
03-17 17:52:27.128: V/webcore(19908): WEBKIT_DRAW arg1=0 arg2=0 obj=null
03-17 17:52:27.128: V/webcore(19908): webkitDraw start
03-17 17:52:27.128: V/webcore(19908): webkitDraw NEW_PICTURE_MSG_ID
03-17 17:52:27.128: V/webcore(19908): UPDATE_CACHE_AND_TEXT_ENTRY arg1=0 arg2=0 obj=null
03-17 17:52:27.128: V/webview(19908): NEW_PICTURE_MSG_ID
03-17 17:52:27.128: V/webview(19908): NEW_PICTURE_MSG_ID {0,0,313,353}
03-17 17:52:27.128: V/webview(19908): UPDATE_TEXT_ENTRY_MSG_ID
03-17 17:53:28.266: V/websync(19908): *** WebSyncManager sync ***
03-17 17:53:28.266: V/websync(19908): CookieSyncManager::syncFromRamToFlash STARTS
03-17 17:53:28.268: V/websync(19908): CookieSyncManager::syncFromRamToFlash DONE

【问题讨论】:

  • 你的 JavaScript 代码中有 rowcolumn 整数值吗?您在 LogCat 中看到任何消息吗?返回String 没问题——我有可以做到这一点的示例代码。
  • 如果您有字符串的示例代码,请提供解决方案。
  • 该目录包含一对使用addJavaScriptInterface()的项目:github.com/commonsguy/cw-advandroid/tree/master/WebView
  • 我在javascript中犯了一个错误。问题已经解决了。工作 int 数据类型。
  • @CommonsWare,我修改了 GeoWeb1 以在 addJavascriptInterface 之后立即打印,使用 browser.loadUrl("javascript:console.log(locater);");。该调用打印出“未捕获的 ReferenceError:未定义定位器”。稍后在 onResume() 方法中的相同调用开始打印对象: com.commonsware.android.geoweb.GeoWebOne$Locater@416b0000 。 (控制台输出更改的文件要点:gist.github.com/3057175)。有什么方法可以知道新对象需要多长时间才能可用?

标签: javascript android android-webview


【解决方案1】:

如果您将方法参数从int 更改为String,那么该函数应该可以从WebView 中调用:

public String getCellString(String row, String column)
{
    return row + "," + column;
}

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 2016-11-29
    • 2016-08-29
    • 1970-01-01
    • 2019-02-02
    • 2011-08-07
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多