В моем проекте я передал String из swift в JavaScript, и в режиме оповещения он работает отлично. Но если у меня есть проходной массив или словарь, значит, возвращает неопределенные значения, такие как
[объект объекта], [объект объекта], [объект объекта], [объект
Объект], [объект Объект], [объект Объект]
но я не знаю, как решить проблему.
Здесь я приложил снимок экрана для ответа на веб-просмотр.
Здесь я поделился своим кодом, что я попробовал,
override func viewDidLoad() {
super.viewDidLoad()
webView.delegate = self
loadHTMLFromBundle()
}
func loadHTMLFromBundle(){
let url = Bundle.main.url(forResource: "index", withExtension: "html")
let urlRequest:URLRequest = URLRequest(url:url!)
self.webView.loadRequest(urlRequest)
}
func getComponents() {
guard let path = Bundle.main.path(forResource: "components", ofType: "txt") else { return }
let url = URL(fileURLWithPath: path)
let jsonData = try! Data(contentsOf: url)
tempComponentArray = try! JSONSerialization.jsonObject(with: jsonData, options: []) as! NSArray
print("jsonDict:\n \(tempComponentArray)")
do {
let jsonData = try JSONSerialization.data(withJSONObject: tempComponentArray, options: [])
//Convert back to string. Usually only do this for debugging
if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {
print(JSONString)
let urlString:NSString = NSString(format: "myNewFunction(%@)", JSONString)
print("urlString: ",urlString)
self.templateFormStr = JSONString
print(self.templateFormStr)
let encodedStr = self.webView.stringByEvaluatingJavaScript(from: "myNewFunction('\(self.templateFormStr)')") **-----------> Here I passed or evaluate the data to javascript**
print("encodedStr: ",encodedStr!)
}
} catch {
print(error.localizedDescription)
}
}
@IBAction func loadJSBtnTapped(_ sender: Any) {
getComponents()
}
Здесь я разделяю значения массива,
[
{
"placeholder": "Enter the comments",
"input": true,
"showWordCount": false,
"label": "North",
"showCharCount": false,
"type": "textfield",
"allowMultipleMasks": false,
"key": "textField"
},
{
"placeholder": "Enter the comments",
"input": true,
"showWordCount": false,
"label": "South",
"showCharCount": false,
"type": "textfield",
"allowMultipleMasks": false,
"key": "south"
},
{
"placeholder": "Enter the comments",
"input": true,
"showWordCount": false,
"label": "East",
"showCharCount": false,
"type": "textfield",
"allowMultipleMasks": false,
"key": "east"
},
{
"placeholder": "Enter the comments",
"input": true,
"showWordCount": false,
"label": "West",
"showCharCount": false,
"type": "textfield",
"allowMultipleMasks": false,
"key": "west"
},
{
"placeholder": "Enter the comments",
"input": true,
"showWordCount": false,
"label": "Easements / Encroachments",
"showCharCount": false,
"type": "textfield",
"allowMultipleMasks": false,
"key": "easementsEncroachments"
},
{
"placeholder": "Enter the comments",
"input": true,
"showWordCount": false,
"label": "Soil ans Sub-Soil Conditions",
"showCharCount": false,
"type": "textfield",
"allowMultipleMasks": false,
"key": "soilAnsSubSoilConditions"
},
{
"placeholder": "Enter the comments",
"input": true,
"showWordCount": false,
"label": "Environmental Conditions",
"showCharCount": false,
"type": "textfield",
"allowMultipleMasks": false,
"key": "environmentalConditions"
}
]
Здесь я поделился своим HTML кодом, который я пробовал,
<!DOCTYPE html>
<html>
<p>Click the button to display an alert box.</p>
<script>
function myNewFunction(param) {
var arrayData = JSON.parse(param);
alert(arrayData)
}
</script>
<body>
<button onclick="myFunction()">Try it</button>
</body>
</html>
Когда «Дисплей без разбора» означает, что оповещение пустое, здесь я прикрепил скриншот.