我正在尝试在我的Android活动中通过我的标题栏上的ImageButton启动驻留在我的webView中的HTML文档中的java函数(让我抓住mt breath - LOL)。我遵循了帮助文档,但我没有得到它。
有人可以更正我的剧本,这将是一个很大的帮助,更多的是要学习。日Thnx !!
HTML doc(mWebView)中的函数:
<script type="text/javascript">
$(document).ready(function() {
function ToC(){
$.mobile.changePage("docs/ToC.html", "slideup");
};
});
</script>
...和.main活动中的代码(main.java):
public class main extends Activity {
WebView mWebView;
private Handler mHandler = new Handler();
// -- Called when the activity is first created. --/
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
if (savedInstanceState != null)
((WebView)findViewById(R.id.webView1)).restoreState(savedInstanceState);
// -- Set up the WebView -->
mWebView = (WebView) findViewById(R.id.webView1);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new myJavaScriptInterface(), "jsi");
mWebView.setWebViewClient(new myWebViewClient());
mWebView.loadUrl("file:///android_asset/www/index.html");
final class myJavaScriptInterface {
myJavaScriptInterface() {
ImageButton imageButton = (ImageButton) findViewById(R.id.bookBtn);
imageButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mHandler.post(new Runnable() {
public void run() {
mWebView.loadUrl("javascript:ToC()");
}
});
}
});
}
}
}
答案 0 :(得分:0)
$.mobile.changePage("docs/ToC.html", "slideup");
假设这会修改window.location.href
或类似内容,似乎这可能不会触发shouldOverrideUrlLoading()
。有关详情,请参阅window.location.href javascript does not trigger shouldOverrideUrlLoading,包括我建议的解决方法。
答案 1 :(得分:0)
这有点晚了,但请注意myJavaScriptInterface()
永远不会被调用,因此按钮的OnClickListener永远不会被设置,因此该按钮不会执行任何操作。
javascript界面用于从javascript到您的应用程序的通信;它的方法仅在您在javascript中显式调用它们时调用。要拨打myJavaScriptInterface()
,您需要在javascript中放置一些地方:jsi.myJavaScriptInterface();
。大概你会把它放在你想要设置按钮处理程序的地方,就像在$(document).ready()
中一样。就个人而言,我只是在主代码中设置处理程序,没有接口,但你的方式也可能有效。