0

我正在使用 GeckoView,但在安装 AddOns 时遇到了问题。正如文档中所建议的那样,我提供了与 Android 兼容的 XPI,但没有任何变化。将文件复制到资产不会进行更改。浏览器不承认 WebExtension。

private fun setupGeckoView() {
        geckoSession?.permissionDelegate = object : GeckoSession.PermissionDelegate {
            override fun onContentPermissionRequest(
                session: GeckoSession,
                perm: GeckoSession.PermissionDelegate.ContentPermission
            ): GeckoResult<Int>? {
                return super.onContentPermissionRequest(session, perm)
            }
        }

        geckoView = findViewById(R.id.geckoView)
        val runtime = GeckoRuntime.create(this)

        runtime.settings.consoleOutputEnabled = true
        runtime.webExtensionController.promptDelegate = PromptListener(runtime.webExtensionController)
        runtime.webExtensionController
            .install("https://addons.mozilla.org/android/downloads/file/3719055/youtube_high_definition-85.0.0-an+fx.xpi")

        geckoSession.open(runtime)
        geckoView.setSession(geckoSession)

        geckoSession.loadUri("https://www.youtube.com")
    }
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gv.webapp">

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.webapp">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--<provider
            android:authorities="com.gv.webapp"
            android:name="com.gv.webapp.Provider">
            <grant-uri-permission android:path="string"
                android:pathPattern="string"
                android:pathPrefix="string" />
        </provider>-->
    </application>

</manifest>

我正在检查日志,结果令人困惑。我已经提示安装了 WebExtension,但是当我查看它时controller.list()它是空的。

4

1 回答 1

0

您可能缺少PermissionDelegate

geckoSession?.permissionDelegate = object : GeckoSession.PermissionDelegate {
    override fun onContentPermissionRequest(
        session: GeckoSession,
        perm: GeckoSession.PermissionDelegate.ContentPermission
    ): GeckoResult<Int>? {
        return super.onContentPermissionRequest(session, perm)
    }
}

权限委托允许您处理来自 Gecko 的任何需要处理的权限的请求。

于 2022-02-14T21:38:39.617 回答