Android新手求助:接收JS消息切换Activity时遇Unresolved reference @MainActivity错误
解决WebView JS交互跳转Activity的引用错误
错误原因
你定义的JsObject是WebViewActivity的内部类,却错误使用了this@MainActivity来获取Context——当前外部类是WebViewActivity而非MainActivity,编译器无法识别这个引用。另外,默认的内部类是静态的,无法直接访问外部Activity实例,也会导致Context获取失败。
修复方案
- 将
JsObject改为内部类(inner class),使其能持有外部WebViewActivity的引用; - 把
this@MainActivity替换为this@WebViewActivity,使用当前Activity作为跳转的Context; - 直接调用Activity的
startActivity方法完成跳转。
修改后的完整代码
package io.github.g00fy2.quickiesample import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.webkit.JavascriptInterface import android.webkit.WebView import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat class WebViewActivity : AppCompatActivity() { // 改为inner class,持有外部Activity引用 inner class JsObject { @JavascriptInterface fun msg(): String { return "From Android!" } @JavascriptInterface fun postMsg(msg: String) { // 使用WebViewActivity的实例作为Context创建Intent val mainActivityIntent = Intent(this@WebViewActivity, MainActivity::class.java) mainActivityIntent.putExtra("postMsg", msg) // 调用Activity的startActivity方法完成跳转 startActivity(mainActivityIntent) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() WindowCompat.setDecorFitsSystemWindows(window, false) setContentView(R.layout.activity_web_view) // 替换成你的布局ID ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } // 初始化WebView并绑定JS接口 val webView = findViewById<WebView>(R.id.web_view) // 从布局获取WebView webView.settings.javaScriptEnabled = true webView.addJavascriptInterface(JsObject(), "AndroidBridge") // 命名JS调用的桥接对象 // 加载HTML页面(示例为本地assets文件) webView.loadUrl("file:///android_asset/test.html") } }
额外注意事项
- 确保
MainActivity已在AndroidManifest.xml中注册,否则跳转会失败; - JS中调用Android方法示例:
window.AndroidBridge.postMsg("Hello from JS!"); - 开启
javascriptEnabled存在安全风险,正式环境建议配合WebViewClient做域名校验,避免恶意页面注入。
内容的提问来源于stack exchange,提问作者Larry K
相关产品推荐
相关产品推荐

