我通过注入的javascript(又名inappbrowser回调)在打开的浏览器中打开并执行此函数。
该功能有效,因为我看到了警报。 inappbrowser通过window.open(...)打开:
var f_el_tname = document.body.getElementsByTagName("the_tag")[0];
//the above alerted "undefined" in android browser and the correct value in the desktop
//rewriting variable for debug purposes
f_el_tname = document.body.getElementsByTagName("the_tag");
alert(f_el_tname.length); //this gives "0" in phonegap android browser and "1" in desktop (correct)
for(var i = 0; i < f_el_tname.size; i++){
alert(f_el_tname); //this does not even run
}
为什么会发生这种情况?使用“桌面”和“android”,我指的是访问桌面或android中的phonegap实例,因此代码和上下文几乎相同。有什么想法吗?
我认为这可能会发生,因为document.body.getElementsByTagName("the_tag");
中的文档指的是app文档,而不是inappbrowser中的文档。 如何在loadstop回调中的浏览器中获取文档?
窗口由var ref = window.open(...);
var ref = window.open(url,'_blank','location=yes,toolbar=no,hidden=yes','closebuttoncaption=Return');
ref.addEventListener('loadstop', function(){
var f_el_tname = ref.document.body.getElementById("l_fdb");
//the above gives an error
});
答案 0 :(得分:4)
尝试使用inappbrowser.executeScript:
var ref = cordova.InAppBrowser.open(url,'_blank','location=yes,toolbar=no,hidden=yes');
ref.addEventListener('loadstop', function() {
var code = '(function(){ return document.getElementById("l_fdb"); })()';
ref.executeScript({code: code}, function(results) {
console.log('l_fdb: ' + results);
});
});
可以在the plugin tests中找到executeScript
用法的示例。