按官方http://cordova.apache.org/ 文档,使用命令行生成工程后,把CordovaLib工程和你的app工程导入eclipse里,
然后在CordovaLib工程下,找到
org.apache.cordova.CordovaBridge这个类,
//if (pluginManager.shouldAllowBridgeAccess(origin)) { // Enable the bridge int bridgeMode = Integer.parseInt(defaultValue.substring(9)); jsMessageQueue.setBridgeMode(bridgeMode); // Tell JS the bridge secret. int secret = generateBridgeSecret(); return ""+secret; //} else { // Log.e(LOG_TAG, "gap_init called from restricted origin: " + origin); //} //return "";
把if判断那里注释掉几行。
它这里调用了这个方法:
public boolean shouldAllowBridgeAccess(String url) { for (PluginEntry entry : this.entryMap.values()) { CordovaPlugin plugin = pluginMap.get(entry.service); if (plugin != null) { Boolean result = plugin.shouldAllowBridgeAccess(url); if (result != null) { return result; } } }
// Default policy: return url.startsWith("file://"); }
它循环看所有插件,是否允许访问该url,貌似是有一个同意,就通过。 结果,这里一个插件都没同意,其实是没覆盖shouldAllowBridgeAccess方法, 结果走了最后的file://的判断,即只有本地app里的文件允许访问。
所以,上面那里,直接注释掉,就OK了。 app直接访问远程网页,里面的js调用也可以被响应了。 啊哈哈~~~ =========================== 其实,不必这么改,在config.xml里 直接指定<content src="http://xxx.com/m/" /> 这样的远程地址即可。 我用的是cordova 5.3.3版本。
|