我在iframe的某些网站上使用了chrome扩展程序(不是Chrome应用程序):
<iframe id="application" src="chrome-extension://<extension_id>/index.html"></iframe>
此扩展程序通过以下方式将Native Client对象添加到页面:
<embed name="nacl_module" id="nacl_module" src="/naclmodule.nmf" type="application/x-nacl">
将扩展程序上传到网上应用店后,它会在控制台中生成以下错误消息:&#34;只有从Chrome网上应用店安装的解压扩展程序和应用程序才能加载NaCl模块,而无需启用Native Client :flags。&#34;
当我将此扩展程序作为解包方式(从本地文件夹上传)上传到浏览器时,未发生错误。
我可以在Chrome设置中检查启用Native Client标记,并要求用户手动启用它。但这不是最好的方式。
也许我做错了,从Web Store安装的扩展也应该自动启用NaCL标志?
扩展的manifect.json文件是:
{
"description": "<description>",
"homepage_url": "<site_url>",
"icons": {
"128": "icon128.PNG"
},
"key": <key>,
"manifest_version": 2,
"minimum_chrome_version": "28",
"name": "<name>",
"offline_enabled": true,
"permissions": [ "alarms", "storage", "unlimitedStorage" ],
"platforms": [ {
"nacl_arch": "x86-64",
"sub_package_path": "_platform_specific/x86_64"
}, {
"nacl_arch": "x86-32",
"sub_package_path": "_platform_specific/x86_32"
} ],
"update_url": "https://clients2.google.com/service/update2/crx",
"version": "0.30",
"web_accessible_resources": [ "/*" ]
}
更新 我在js代码中为iframe设置了sorce url。所以我尝试通过以下方式使用chrome.extension.getURL:
var frame = document.getElementById("frame_app");
frame.src = chrome.extension.getURL('index.html');
但是在运行时遇到错误:&#34;无法读取属性&#39; getURL&#39;未定义&#34;
然后我发布了有关content_script in chrome extensions的信息。所以我在清单文件中添加了以下内容:
"content_scripts": [{
"matches": ["http://*.mysite.com/*", "https://*.mysite.com/*"],
"js": ["contentscript.js"]
}],
您可以在下面找到contentscript.js文件:
console.log("CONTENT SCRIPT - test")
window.postMessage({ type: "FROM_SCRIPT", text: chrome.extension.getURL('index.html') }, "*")
并在js文件中处理此消息:
window.addEventListener("message", function(event) {
// We only accept messages from ourselves
if (event.source != window)
return;
if (event.data.type && (event.data.type == "FROM_SCRIPT")) {
var frame = document.getElementById("frame_app");
frame.src = "";
frame.src = event.data.text;
}
}, false);
当我将此扩展程序从本地文件夹(解包扩展名)上传到chrome时,它可以正常工作。但是从Web Store上传和安装后仍然出现错误:&#34;只有从Chrome网上应用店安装的解压缩扩展程序和应用程序才能加载NaCl模块,而无需在about:flags中启用Native Client。&#34;