myWebView.loadUrl("myFunction('Hello World!')");
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="HandheldFriendly" content="True"> <meta name="viewport" content="width=620, user-scalable=no"> <link rel="stylesheet" href="test.css"/> <script src="./scripto/scripto.js"></script> <script src="interfaces/preferences_interface.js"></script> <script src="test.js"></script> </head> <body> <label>Name:</label> <input id="name_field" type="text" size="15" maxlength="15"><br/> <label>Surname</label> <input id="surname_field" type="text" size="15" maxlength="15"><br/> <label>Age:</label> <input id="age_field" type="text" size="15" maxlength="15"><br/> <label>Height:</label> <input id="height_field" type="text" size="15" maxlength="15"><br/><br/> <label>Married:</label> <input id="married_checkbox" type="checkbox"><br/><br/> <button onclick="saveUserData()">Save</button> </body> </html
function loadUserData() { PreferencesInterface.getUserData(function(userJson) { var user = JSON.parse(userJson); document.getElementById('name_field').value = user.name; document.getElementById('surname_field').value = user.surname; document.getElementById('age_field').value = user.age; document.getElementById('height_field').value = user.height; document.getElementById('married_checkbox').checked = user.married; }); } function saveUserData() { var user = getUserData(); PreferencesInterface.saveUserData(user); } function getUserData() { var user = {}; user['name'] = document.getElementById('name_field').value; user['surname'] = document.getElementById('surname_field').value; user['age'] = document.getElementById('age_field').value; user['height'] = document.getElementById('height_field').value; user['married'] = document.getElementById('married_checkbox').checked; return JSON.stringify(user); } // , document.addEventListener('DOMContentLoaded', function() { loadUserData(); }, false);
function PreferencesInterface() {} PreferencesInterface.saveUserData = function(user) { Scripto.call('Preferences', arguments); }; PreferencesInterface.getUserData = function(callback) { Scripto.callWithCallback('Preferences', arguments); };
public class User { @SerializedName("name") private String name; @SerializedName("surname") private String surname; @SerializedName("age") private int age; @SerializedName("height") private float height; @SerializedName("married") private boolean married; public User() { } public User(String name, String surname, int age, float height, boolean married) { this.name = name; this.surname = surname; this.age = age; this.height = height; this.married = married; } public String getName() { return name; } public String getSurname() { return surname; } public int getAge() { return age; } public float getHeight() { return height; } public boolean isMarried() { return married; } public String getUserInfo() { return String.format("Name: %s \nSurname: %s \nAge: %d \nHeight: %s \nMarried: %s", name, surname, age, height, married); } }
public class PreferencesInterface { private Context context; private SharedPreferences prefs; public PreferencesInterface(Context context) { this.context = context; this.prefs = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); } public void saveUserData(User user) { prefs.edit().putString("user_name", user.getName()).apply(); prefs.edit().putString("user_surname", user.getSurname()).apply(); prefs.edit().putInt("user_age", user.getAge()).apply(); prefs.edit().putFloat("user_height", user.getHeight()).apply(); prefs.edit().putBoolean("user_married", user.isMarried()).apply(); Toast.makeText(context, user.getUserInfo(), Toast.LENGTH_SHORT).show(); } public User getUserData() { String userName = prefs.getString("user_name", ""); String userSurname = prefs.getString("user_surname", ""); int userAge = prefs.getInt("user_age", 0); float userHeight = prefs.getFloat("user_height", 0.0f); boolean userMarried = prefs.getBoolean("user_married", false); return new User (userName, userSurname, userAge, userHeight, userMarried); } }
Scripto scripto = new Scripto.Builder(webView).build(); scripto.addInterface("Preferences", new PreferencesInterface(this));
scripto.onPrepared(new ScriptoPrepareListener() { @Override public void onScriptoPrepared() { userInfoScript.loadUserData(); } });
String html = AssetsReader.readFileAsText(this, "test.html"); webView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", null);
public void getUserData(View view) { userInfoScript.getUserData() .onResponse(new ScriptoResponseCallback<User>() { @Override public void onResponse(User user) { Toast.makeText(MainActivity.this, user.getUserInfo(), Toast.LENGTH_LONG).show(); } }) .onError(new ScriptoErrorCallback() { @Override public void onError(JavaScriptException error) { Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show(); } }).call(); }
Source: https://habr.com/ru/post/305678/
All Articles