diff --git a/jsbridge/src/main/java/com/apkfuns/jsbridge/JsBridgeImpl.java b/jsbridge/src/main/java/com/apkfuns/jsbridge/JsBridgeImpl.java index a4792b1..62de2e8 100644 --- a/jsbridge/src/main/java/com/apkfuns/jsbridge/JsBridgeImpl.java +++ b/jsbridge/src/main/java/com/apkfuns/jsbridge/JsBridgeImpl.java @@ -214,6 +214,13 @@ private JsModule getModule(String moduleName) { private String getInjectJsString() { StringBuilder builder = new StringBuilder(); + // Issue #35: guard the whole injection so OnJsBridgeReady + // fires only once per JS context. A fresh page load starts + // with window. undefined and gets the bridge set + // up exactly once. Re-injection on the same context (for + // example onPageFinished firing multiple times, or sub + // frames triggering an extra inject call) becomes a no-op. + builder.append("if(!window.").append(newProtocol).append("){"); builder.append("var ").append(className).append("=function(){"); // 注入通用方法 builder.append(JBUtilMethodFactory.getUtilMethods(newLoadReadyMethod)); @@ -255,6 +262,7 @@ private String getInjectJsString() { builder.append("};"); builder.append("window." + newProtocol + "=new " + className + "();"); builder.append(newProtocol + ".OnJsBridgeReady();"); + builder.append("}"); return builder.toString(); }