gpt4 book ai didi

javascript - loadUrl 和 loadData 与 javascript 的区别

转载 作者:太空宇宙 更新时间:2023-11-03 11:19:15 24 4
gpt4 key购买 nike

我尝试在 Android webview 中加载一个带有 ajax post 请求的 html 页面。

当我使用 loadUrl 加载 webview 时,javascript 工作正常,但是当我尝试使用 loadData 加载(我需要它)时,我收到一个错误:“NETWORK_ERR: XMLHttpRequest Exception 101”。这个错误听起来像是访问控制起源问题。

parseJsoup 函数用好的字符串替换 html 页面中的一些字符串。我检查了传递给 loadData 的数据,脚本部分没有改变。

我的 oncreate 函数:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String html = parseJsoup("index.html");

setContentView(R.layout.main);
myBrowser = (WebView)findViewById(R.id.mybrowser);
myBrowser.getSettings().setJavaScriptEnabled(true);
myBrowser.setWebViewClient(new MyWebViewClient());
//myBrowser.loadUrl("file:///android_asset/index.html");
myBrowser.loadDataWithBaseURL("", html, "text/html", "utf-8", null);
}

还有我的 javascript 代码:

$.ajaxSetup({
contentType: "application/json; charset=utf-8",
datatype: "json",
async: false,
});


$.ajax({
type: "POST",
url: "my url",
data: 'my data',
success: function(data){
// Do some action here with the data variable that contains the resulting message
document.write("OK "+JSON.stringify(data));
console.log(data);
},
error: function(data){
document.write("KO "+JSON.stringify(data));
console.log(data);
}
});

谢谢

最佳答案

假设您说的是 android.webkit.WebView.loadDataWithBaseURL,当您说 loadData 时是 android.webkit.WebView.loadUrl,当您说 loadUrl 时。

来自 documentation ,它们之间的唯一区别是,loadURL 呈现一个具有您设置的 url 的 webkit。另一方面,loadData渲染webkit,源码来自一个参数,baseURL也是一个参数。

您收到的 javascript 错误消息主要与您尝试跨域 ajax 请求有关。对于您的情况,这似乎更合理,因为您的方法之间的唯一区别似乎是其中一个是实际的 URL,另一个是动态创建的网页,没有固定的 url。

还有来自 documentation of loadDataWithBaseURL

"... The base URL is used both to resolve relative URLs and when applying JavaScript's same origin policy."

而且您没有设置 baseURL 参数可能会给我们提供有关该问题的线索。

尝试将一些虚拟域名或您拥有的域分配给 baseURL,并将该域附加到您的 javascript ajax 资源端点。如:

myBrowser.loadDataWithBaseURL("http://mydomain/", html, "text/html", "utf-8", null);

在 Javascript 上:

$.ajax({
type: "POST",
url: "http://mydomain/my url",
data: 'my data',
success: function(data){
// Do some action here with the data variable that contains the resulting message
document.write("OK "+JSON.stringify(data));
console.log(data);
},
error: function(data){
document.write("KO "+JSON.stringify(data));
console.log(data);
}
});

关于javascript - loadUrl 和 loadData 与 javascript 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11448284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com