我正在打包一个移动网站(通过网络)在PhoneGap,并希望拦截某些链接,并打开他们使用ChildBrowser插件。是否可以从本机代码中触发ChildBrowser (我已经确定要拦截哪些链接)
我尝试了下面的代码,但是它导致了NULLPointerException:
ChildBrowser childBrowser = new ChildBrowser();
childBrowser.openExternal(url, true);例外细节:
07-29 10:49:52.632 947-947/com.abc.androidTablet E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.phonegap.plugins.childBrowser.ChildBrowser.openExternal(ChildBrowser.java:127)
at com.mygola.androidTablet.abc_android$1.shouldOverrideUrlLoading(abc_android.java:96)
at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:270)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:372)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)发布于 2013-08-01 06:42:51
最后,下面的代码对我有用..。
ChildBrowser childBrowser = new ChildBrowser();
childBrowser.cordova = this;
childBrowser.showWebPage(url, null);发布于 2013-07-29 09:39:25
没有您的logcat,很难给您进一步的建议使用插件,但如果您是从本机层调用openExternal,就没有理由使用插件。如果您查看源代码,您将看到它所做的一切就是获取您的url并将其加载到一个新的DroidGap页面中。
如果你只接受了必要的部分,它可能有助于跟踪异常发生的地方。
function void openExternalUrl() {
intent = new Intent().setClass(this.ctx.getContext(), org.apache.cordova.DroidGap.class);
intent.setData(Uri.parse(url)); // This line will be removed in future.
intent.putExtra("url", url);
this.ctx.startActivity(intent);
}编辑
您将得到上下文变量上的空异常。我不知道当时为什么它是null,但是您可以很容易地修复它,修改方法并传递当前上下文。用上下文替换this.cordova,您应该会没事的。从您的活动中调用这个参数,将this作为最后一个参数(ex: childBrowser.openExternal("http://www.google.com", true,this))。
public String openExternal(String url, boolean usePhoneGap,Context context) {
...
intent = new Intent().setClass(context, org.apache.cordova.DroidGap.class);
...
context.startActivity(intent);
}此外,为了防止其他调用该函数的错误,添加另一个具有原始参数的方法:
public String openExternal(String url, boolean usePhoneGap) {
openExternal(url,usePhoneGap,this.cordova.getActivity());
}https://stackoverflow.com/questions/17917344
复制相似问题