5

我在 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)
4

2 回答 2

1

如果没有您的 logcat,很难使用该插件为您提供进一步的建议,但如果您openExternal从本机层调用,则没有理由使用该插件。如果您查看源代码 ,您会看到它所做的只是获取您的网址并将其加载到新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);

 }

编辑

您在上下文变量上得到一个空异常。我不知道当时为什么它为空,但您可以通过修改方法并传递当前上下文轻松解决该问题。用上下文替换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()); 
}
于 2013-07-29T09:39:25.877 回答
1

最后,下面的代码对我有用...

ChildBrowser childBrowser = new ChildBrowser();
childBrowser.cordova = this;
childBrowser.showWebPage(url, null);
于 2013-08-01T06:42:51.017 回答