From 768329ee90b5cb465215cbad319858b851f45e82 Mon Sep 17 00:00:00 2001 From: hublot Date: Sun, 7 Apr 2024 03:33:57 +0800 Subject: [PATCH 1/3] fix: onScroll is not triggered when the contentSize is changed --- .../com/reactnativecommunity/webview/RNCWebView.java | 7 ++++++- .../reactnativecommunity/webview/RNCWebViewClient.java | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java index a9694c696..6ad85a3b6 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java @@ -39,7 +39,7 @@ import java.util.List; import java.util.Map; -public class RNCWebView extends WebView implements LifecycleEventListener { +public class RNCWebView extends WebView implements LifecycleEventListener, RNCWebViewClient.OnLoadingFinishedListener { protected @Nullable String injectedJS; protected @Nullable @@ -214,6 +214,7 @@ public void setWebViewClient(WebViewClient client) { if (client instanceof RNCWebViewClient) { mRNCWebViewClient = (RNCWebViewClient) client; mRNCWebViewClient.setProgressChangedFilter(progressChangedFilter); + mRNCWebViewClient.loadingFinishedListener = this; } } @@ -340,6 +341,10 @@ protected void sendDirectMessage(final String method, WritableMap data) { mCatalystInstance.callFunction(messagingModuleName, method, params); } + public void onLoadingFinished() { + onScrollChanged(getScrollX(), getScrollY(), getScrollX(), getScrollY()); + } + protected void onScrollChanged(int x, int y, int oldX, int oldY) { super.onScrollChanged(x, y, oldX, oldY); diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java index d8af74a7d..1122d4b36 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java @@ -40,6 +40,12 @@ public class RNCWebViewClient extends WebViewClient { protected boolean mLastLoadFailed = false; protected RNCWebView.ProgressChangedFilter progressChangedFilter = null; + + public static interface OnLoadingFinishedListener { + void onLoadingFinished(); + } + public OnLoadingFinishedListener loadingFinishedListener = null; + protected @Nullable String ignoreErrFailedForThisURL = null; protected @Nullable RNCBasicAuthCredential basicAuthCredential = null; @@ -297,6 +303,9 @@ public boolean onRenderProcessGone(WebView webView, RenderProcessGoneDetail deta protected void emitFinishEvent(WebView webView, String url) { int reactTag = RNCWebViewWrapper.getReactTagFromWebView(webView); UIManagerHelper.getEventDispatcherForReactTag((ReactContext) webView.getContext(), reactTag).dispatchEvent(new TopLoadingFinishEvent(reactTag, createWebViewEvent(webView, url))); + if (loadingFinishedListener != null) { + loadingFinishedListener.onLoadingFinished(); + } } protected WritableMap createWebViewEvent(WebView webView, String url) { From 491965afd5198c152b5dda872d30a127e9ef786b Mon Sep 17 00:00:00 2001 From: hublot Date: Sun, 7 Apr 2024 09:07:24 +0800 Subject: [PATCH 2/3] chore: dealloc the webview client --- .../java/com/reactnativecommunity/webview/RNCWebView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java b/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java index 6ad85a3b6..556814bab 100644 --- a/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java +++ b/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java @@ -381,6 +381,10 @@ protected void dispatchEvent(WebView webView, Event event) { protected void cleanupCallbacksAndDestroy() { setWebViewClient(null); + if (mRNCWebViewClient != null) { + mRNCWebViewClient.loadingFinishedListener = null; + mRNCWebViewClient = null; + } destroy(); } From f9b90dd4463a1c62c723465c5b2437045fb8096e Mon Sep 17 00:00:00 2001 From: hublot Date: Thu, 11 Apr 2024 09:18:53 +0800 Subject: [PATCH 3/3] feat: publish the package to npm --- .github/workflows/package-publish.yml | 21 +++++++++++++++++++++ package.json | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/package-publish.yml diff --git a/.github/workflows/package-publish.yml b/.github/workflows/package-publish.yml new file mode 100644 index 000000000..06006a429 --- /dev/null +++ b/.github/workflows/package-publish.yml @@ -0,0 +1,21 @@ +name: package-publish + +on: workflow_dispatch + +jobs: + package-publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '18.x' + registry-url: 'https://registry.npmjs.org' + - name: Install Package + run: yarn + - name: Build + run: yarn prepare + - name: Publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + run: npm whoami && npm publish --access public diff --git a/package.json b/package.json index 63e46842a..d06d6f0ae 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "react-native-webview", + "name": "@onekeyfe/react-native-webview", "description": "React Native WebView component for iOS, Android, macOS, and Windows", "main": "index.js", "main-internal": "src/index.ts",