1

こんにちは、簡単な質問です。

webview からネイティブを呼び出す最良の方法は何ですか。iframeまたはwindow.location ? _

例えば:

gapBridge = document.createElement("iframe");
gapBridge.setAttribute("style", "display:none;");
gapBridge.setAttribute("height","0px");
gapBridge.setAttribute("width","0px");
gapBridge.setAttribute("frameborder","0");
document.documentElement.appendChild(gapBridge);
gapBridge.src = custom + "://" + custom;

また :

window.location = custom + "://" + custom;

Ps :ところで、埋め込まれた webview で src を変更しても機能しないようです。ここのスタックに関する他の記事で明らかになったように

4

2 に答える 2

0

私の場合、iframeの方が良いようです。私が見てwindow.locationいる問題は、複数の呼び出しが連続している場合、ブラウザーが一部を無視することです。iframe を使用している間、呼び出しごとに 1 つずつ、実際には複数の iframe を作成できます。また、遅延後に iframe を削除するので、空の iframe の巨大な DOM が表示されることはありません。

私が使用する関数は次のとおりです。

function _callNative(url){
    var _frame = document.createElement('iframe');
    _frame.width=0; _frame.height=0;_frame.frameBorder=0;
    document.body.appendChild(_frame);
    if (url.indexOf('?') >= 0){
        url = url + "&cb=";
    }else{
        url = url + "?cb=";
    }
    _frame.src = url + Math.round(Math.random()*1e16);
    // Remove the iframe
    setTimeout(function(){document.body.removeChild(_frame);}, 2000);
}

例えば:

_callNative('native://doSomethingNative()');
_callNative('native://doSomethingElse')
于 2012-10-23T17:56:09.783 に答える
0

パフォーマンスを考慮したさまざまな代替手段の概要を次に示し ます 。 -latency.html

基本的に、iOS 8 以下をサポートしている場合は、location.replace.

location.replaceiOS 9 以降をサポートしていて、違いが最小限である場合は、好みの と のどちらかを選択できますWKScriptMessageHandler

于 2016-02-10T11:54:02.797 に答える